linux的shell 命令和bash 特性


1. /bin/sh

  • 定义:系统默认的 shell,一般是 dash(Ubuntu)或 bash 的兼容模式。
  • 特点
    1. 启动快,占用资源少。
    2. 只支持 最基本的 shell 命令,很多 bash 特性(如 source[[ ]] 测试、数组等)不支持。
    3. 不会自动加载用户的 bash 配置(比如 ~/.bashrc),所以 conda activate 可能找不到命令。
  • 使用场景:脚本里只执行简单命令,不依赖 bash 特性。
/bin/sh -c "echo hello"

2. bash -i -c

  • 定义:启动一个 bash shell 的交互式模式,执行一条命令。
    • -i:交互式 shell,会加载 ~/.bashrc 等配置。
    • -c "命令":执行指定命令字符串,然后退出。
  • 特点
    1. 可以使用 bash 特性(如 sourceconda activate、函数、数组)。
    2. 会加载用户环境配置,所以命令能找到 conda、python 等路径。
    3. 适合需要完整 shell 环境的后台任务。
  • 使用场景:你要在 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 "..." 更稳妥。