Shell 脚本是用与我当前的 shell 不同的 shell 编写的

Shell 脚本是用与我当前的 shell 不同的 shell 编写的

如果 shell 脚本是

#!/bin/sh

但我的$SHELL的值是ksh。

如果我将 ksh 更改为 sh,然后执行脚本,会有什么不同吗? IE。脚本是否会根据执行它的 shell 类型而具有不同的行为。

答案1

脚本是否会根据执行它的 shell 类型而具有不同的行为。

  • 从某种意义上说bash script.shksh script.sh可能表现不同,是的。通常,这种区别是其中一个有效,一个给出错误,但有一系列选项。许多简单的脚本在常见 shell 上具有相同的行为,但更复杂的脚本可能会遇到不同 shell 提供的语言之间的众多差异之一。

  • 脚本的行为会根据您的值而有所不同吗SHELL?仅当脚本$SHELL直接或间接调用自身、测试或以其他方式使用其值时。普通的shell脚本一般不会,但是可以。

  • 脚本的行为是否会根据调用它的父 shell 的不同而有所不同?极其罕见 - 脚本必须做相当多的工作才能检测到这一点,以至于它几乎必须是故意的。


思考您的用例正在./script.shsh交互式 shell(即ksh.如果这是正确的,我们就处于上面的最后一种情况,并且该脚本几乎肯定会以与您自己使用任何其他 shell 相同的方式运行。系统总是会启动一个新/bin/sh进程并告诉它执行脚本。

答案2

不,这没有什么区别。 #!/usr/bin/sh意思是“用于/usr/bin/sh解释此脚本,因此 your 的值$SHELL没有区别。

相关内容