这是哪个shell解释器运行没有shebang的脚本的扩展?
我正在测试我对使用什么解释器的理解,并在运行没有 hashbang 但作为 sudo 的脚本时发现了一些奇怪的行为。
脚本如下:
echo "I am running shell $SHELL"
foo=$'dollar'
echo "run with sudo to see the magic dollar sign <$foo>"
Run Code Online (Sandbox Code Playgroud)
当我以普通用户身份运行此脚本时,一切正常,输出:
I am running shell /bin/bash
run with sudo to see the magic dollar sign <dollar>
但是当我用 sudo 运行时,我得到了输出
I am running shell /bin/bash
run with sudo to see the magic dollar sign <$dollar>
因此,如果没有 sudo,foo 会扩展为“dollar”,但是使用 sudo,$'' 评估将被忽略,它变成了“$dollar”
我现在也明白 $'' 不符合 POSIX 标准,因此如果运行脚本,除非在 bash 下运行,否则不一定有效。并确认sudo bash myscript.sh返回预期的“美元”输出。
但是,在任何这些场景中,$SHELL 表示脚本在 bash 下运行。到底是怎么回事?
PS - 我的 /bin/sh 链接到破折号 - 我只能认为它与此有关
$SHELL不会告诉您正在运行哪个 shell,它会告诉您环境变量SHELL是什么。如果尚未设置,Bash 会将其设置为登录 shell 的路径。
您正在sudo 下运行sh( dash, for you),您可以使用以下命令直接查看pstree:
$ cat test.sh
pstree $$
$ ./test.sh
bash???pstree
$ sudo ./test.sh
sh???pstree
Run Code Online (Sandbox Code Playgroud)
使用sh与 POSIX 一致,尽管规范的那部分不绑定 sudo 的实现选择。
readlink /proc/$$/exe还将确认它是dash专门的。您还可以使用任何其他方式从您链接的问题中识别正在运行的 shell。
在破折号中,$'abc'是一个没有意义的单独美元符号,后跟一个单引号字符串 - 基本上与foo=$将符号保留在任何外壳中的方式相同。
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |