Bash
使用 sudo 呼叫腳本會忽略 shebang
使用 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/sh是dash的符號連結。
你的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。