【发布时间】:2021-12-07 02:39:49
【问题描述】:
我的 Linux 中有几个 shell,比如 bash、sh、zsh...
而且我知道至少有 3 种方法可以指定一个 shell 来执行我的 shell 脚本:
- 在shebang中指定,like
#!/usr/bash - 执行时在命令行中指定,如
sh MyScripts.sh - 在
$SHELL(比如SHELL=zsh)中指定,然后像./MyScripts.sh一样执行脚本
那么,我最大的问题是,当这三种方式之间存在冲突时,哪个规则具有最高优先级?哪个最低?
如果我这样做sh MyScripts.zsh 会怎样?你看,后缀和二进制不匹配。
【问题讨论】:
-
根据我的实验,似乎Rule#2最高,Rule#3最低。对吗?
-
如果脚本是可执行的,是否使用
SHELL取决于你如何启动脚本。例如,bash将执行一个本身没有 shebang 的脚本,而不是使用SHELL的值。 -
@BenjaminW:(3)一般不起作用,尽管有些程序服从 SHELL 变量。我不会依赖它。 (1) 和 (2) 是安全的。 (2) 很有用,因为您不需要相关脚本的可执行权限,(1) 很有用,因为脚本的用户不必考虑脚本是用什么语言编写的。
-
@user1934428 我只是编辑了问题,没有问它,你的意思是标记我吗?