sh命令是否使用用户shell

sh linux命令是否使用用户当前的shell,即使它不是bash ? 例如,假设用户bob正在运行csh。 如果我用函数和csh创build一个脚本,并尝试执行它:

 sh cshtestscript 

这将运行与csh?

然后假设另一个使用乔使用bash。 如果我用函数和bash脚本创build另一个脚本,并尝试执行它:

 sh bashtestscript 

这将运行与bash?

sh只是一个标准的可执行文件,它总是一个特定的shell。 没有魔法可以检测使用哪个shell。

 % whereis sh sh: /bin/sh % ls -l /bin/sh lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash 

在Ubuntu系统上, /bin/sh (缺省情况下)是一个符号链接,它是一个用于非交互式使用的最小的POSIX shell。 如果你在Ubuntu系统上运行sh cshtestscript ,它将尝试用短划线运行脚本。

处理这个问题的正确方法是在脚本中添加一个shebang ,指出要使用哪个shell,使脚本可执行,并始终以./cshtestscript执行。

 #!/bin/csh