使用 sudo 调用脚本会忽略 shebang

使用 sudo 调用脚本会忽略 shebang

使用 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 行,您将得到默认外壳,即短跑

相关内容