跳到正文

容易混淆的问题 ​

容易混淆区别
$SHELL / $0登录 Shell vs 当前进程;看真实进程用 ps -p $$
$TERM / 终端能力只是名字,能力在 terminfo;名字错会乱码
终端 / Shell设备 vs 解释命令的进程
Ctrl-C / Shell信号由终端驱动发给前台进程组,不是 Shell 亲手发
if / [[ 是命令,两侧要空格;[[ ]] 是语法
$? / $!上一条命令的返回码 vs 最后一个后台 PID
./script.sh / script.sh指定路径 vs 去 $PATH 里找
2>&1 的位置放在 > 后才是“都进文件”
无 tty / 有 tty脚本、CI、ssh host cmd 没有 tty,交互程序会失败

两个补充 ​

终端里跑非 Shell 程序。 vim、python、less 都是普通进程,只是把终端切到 raw 模式,自己处理按键,退出时恢复。

返回码与管道。 管道默认只返回最后一段的状态,前面失败看不出来;用 pipefail 或 PIPESTATUS。