我很難理解我的Ubuntu unix環境如何處理腳本執行。我寫了下面的bash腳本(稱爲script.sh
),以顯示我的困惑:使用「sh script.sh」或「./script.sh」運行shell腳本會產生兩種不同的結果?
#!/usr/bin/env bash
if [ $1 == "yes" ]; then
echo -ne "Caught\n"
fi
if [ $1 != "yes" ]; then
echo -ne "Not Caught\n"
fi
當我執行使用sh script.sh yes
這個劇本,我得到下面的輸出:
`tester.sh: 2: [: yes: unexpected operator`
然而,當我使用chmod 775 script.sh
來使腳本可執行,然後使用命令./script.sh yes
,我得到相應的輸出Caught
。
有人可以告訴我我做錯了什麼嗎?無論我使用sh
還是./
方法,我都希望腳本正確執行。
感謝您的幫助!
'sh'運行Ubuntu是'dash',而不是'bash'。當你用'sh'執行時,你正在使用'dash',當你執行'./ script.sh'時,你正在使用'bash'。 –
無論如何改變我的shebang線或什麼,以確保'sh'將使用bash?我想發佈一個腳本,讓其他人在不同的機器上使用,我需要腳本始終在'bash'中執行。 – jake9115
@ jake9115否,'sh'是'sh',而不是'bash'。在某些系統中,'sh'是'bash'的符號鏈接,但即使如此,當調用'sh'時bash的行爲與調用bash時的行爲不同。 – kojiro