Bash

使用 sudo 呼叫腳本會忽略 shebang

  • January 7, 2016

使用 sudo 呼叫腳本會忽略 shebang 並在不同的 shell 中執行腳本。為了測試,我創建了一個腳本 (test.sh),其中包含:

#/bin/bash
echo "BASH is: $BASH"
echo "actual shell is: `readlink /proc/$$/exe`"

首先,我在沒有 sudo的情況下呼叫腳本:

$ ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash

然後,我使用 sudo呼叫腳本:

$ sudo ./test.sh
BASH is:
actual shell is: /bin/dash

我沒想到會這樣。這是正常行為嗎?

注意:我使用的是 Ubuntu (14.04),其中預設的 shell /bin/shdash的符號連結。

你的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`"

您的範例省略了!字元,例如,您應該有#!/bin/bash

如果沒有有效的 hashbang 行,您將獲得預設的 shell,即dash

引用自:https://unix.stackexchange.com/questions/250543