0%

Sh 和 Bash 之间的区别

问题

一般情况下,sh 是指向 bash 的链接。查看 bash 的手册页可知,bash 作为 sh 运行时,相当于 bash --posix,即 sh 以符合 POSIX 标准的方式来运行。

在一次使用脚本的过程中,发现脚本中 alias 命令设置的别名始终无效。后来查资料发现,bashsh 运行脚本的结果是不同的。

默认情况下,bash 运行非交互式 shell 时,是关闭 alias 别名扩展功能的,而脚本就是非交互式 shell。但是,sh 同样的情况下是开启别名扩展功能的。

解决

① 使用 sh 运行脚本。

② 在脚本文件中显式地指出开启别名扩展功能,方法:

1
2
3
4
# 在脚本的 alias 命令之前添加如下命令
# 最好是在脚本的开头位置添加
shopt -s expand_aliases
...

注意

关于 bashsh 的差别可能还有更多,写脚本后应该充分测试。

参考:

https://blog.csdn.net/liuxiangke0210/article/details/66476970