#!/bin/sh & #!/bin/bash區別

在shell腳本的開頭每每有一句話來定義使用哪一種sh解釋器來解釋腳本。
目前研發送測的shell腳本中主要有如下兩種方式:
(1) #!/bin/sh
(2) #!/bin/bash
以上兩種方式有什麼區別?對於腳本的實際運行會產生什麼不一樣的影響嗎?

腳本test.sh內容:
#!/bin/sh
source pcy.sh #pcy.sh並不存在
echo hello
執行./test.sh,屏幕輸出爲:
./test.sh: line 2: pcy.sh: No such file or directory
因而可知,在#!/bin/sh的狀況下,source不成功,不會運行source後面的代碼。
修改test.sh腳本的第一行,變爲#!/bin/bash,再次執行./test.sh,屏幕輸出爲:
./test.sh: line 2: pcy.sh: No such file or directory
hello
因而可知,在#!/bin/bash的狀況下,雖然source不成功,可是仍是運行了source後面的echo語句。
可是緊接着我又試着運行了一下sh ./test.sh,此次屏幕輸出爲:
./test.sh: line 2: pcy.sh: No such file or directory
表示雖然腳本中指定了#!/bin/bash,可是若是使用sh 方式運行,若是source不成功,也不會運行source後面的代碼。linux

爲何會有這樣的區別呢?shell

 

說明:bash

1. sh通常設成bash的軟鏈
[work@zjm-testing-app46 cy]$ ll /bin/sh
lrwxrwxrwx 1 root     root          4 Nov 13   2006 /bin/sh -> bash
2. 在通常的linux系統當中(如redhat),使用sh調用執行腳本至關於打開了bash的POSIX標準模式
3. 也就是說 /bin/sh 至關於 /bin/bash --posix

因此,sh跟bash的區別,實際上就是bash有沒有開啓posix模式的區別

so,能夠預想的是,若是第一行寫成 #!/bin/bash --posix,那麼腳本執行效果跟#!/bin/sh是同樣的(遵循posix的特定規範,有可能就包括這樣的規範:「當某行代碼出錯時,不繼續往下解釋」)app

[原文]http://meiling.blog.51cto.com/6220221/1826201blog

相關文章
相關標籤/搜索