linux的shell 命令和bash 特性
1. /bin/sh
- 定义:系统默认的 shell,一般是
dash(Ubuntu)或bash的兼容模式。 - 特点:
- 启动快,占用资源少。
- 只支持 最基本的 shell 命令,很多 bash 特性(如
source、[[ ]]测试、数组等)不支持。 - 不会自动加载用户的 bash 配置(比如
~/.bashrc),所以conda activate可能找不到命令。
- 使用场景:脚本里只执行简单命令,不依赖 bash 特性。
/bin/sh -c "echo hello"
2. bash -i -c
- 定义:启动一个 bash shell 的交互式模式,执行一条命令。
-i:交互式 shell,会加载~/.bashrc等配置。-c "命令":执行指定命令字符串,然后退出。
- 特点:
- 可以使用 bash 特性(如
source、conda activate、函数、数组)。 - 会加载用户环境配置,所以命令能找到 conda、python 等路径。
- 适合需要完整 shell 环境的后台任务。
- 可以使用 bash 特性(如
- 使用场景:你要在 screen 或 cron 里执行带 conda 环境或复杂 bash 命令的脚本。
bash -i -c "
source /root/miniconda3/etc/profile.d/conda.sh
conda activate streamlit_env
python /home/pywork/funds/FundTrack30/fundmrp.py
"
3. 区别总结表
| 特性 | /bin/sh |
bash -i -c |
|---|---|---|
| 支持 bash 特性 | ❌ | ✅ |
| 自动加载配置 | ❌ | ✅ |
| 启动速度 | 快 | 稍慢(加载配置文件) |
| 用途 | 简单脚本、兼容性要求高 | 复杂脚本、需要 conda/env 的任务 |
💡 经验总结:
- 简单命令 →
/bin/sh -c "..."就够。 - 需要 conda、python、streamlit 等环境 →
bash -i -c "..."更稳妥。
评论