使用 sudo 调用脚本会忽略 shebang 并在不同的 shell 中运行脚本。为了进行测试,我创建了一个脚本(test.sh),其中包含:
#/bin/bash
echo "BASH is: $BASH"
echo "actual shell is: `readlink /proc/$$/exe`"
首先,我调用脚本没有须藤:
$ ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash
然后,我调用脚本与须藤:
$ sudo ./test.sh
BASH is:
actual shell is: /bin/dash
我没想到会这样。这是正常行为吗?
注意:我使用的是 Ubuntu (14.04),其中默认 shell/bin/sh是一个符号链接短跑。
答案1
你的shebang不是shebang。这只是一个她,缺少刘海:
#!/bin/bash
更正示例:
$ ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash
$ sudo ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash
$ cat ./test.sh
#!/bin/bash
echo "BASH is: $BASH"
echo "actual shell is: `readlink /proc/$$/exe`"
答案2
你的例子省略了这个!
字符,例如,你应该有#!/bin/bash
如果没有有效的 hashbang 行,您将得到默认外壳,即短跑。