Shell解釋器

引用別人的話:

就是把腳本的路徑傳入解釋器中去執行:

  • sh test.sh
  • 或者

  • bash test.sh
    這兩者略有區別,我沒有整理過完整的差異,但至少對於 echo 命令來說,以下命令在兩種解釋器下得到的結果是不一樣的:
  • echo -e “hello\nworld”
    bash 會正確的將 \n 解釋爲換行符,sh 則不能。個人建議統一使用 bash 即可
    利用解釋器執行 Shell 腳本,實際上是在當前的 Shell 環境中啓動了一個子進程去執行。
    直接輸入文件名運行

下面這行命令同樣可以用來執行腳本:

  • ./test.sh
    此時要求腳本文件必須是可執行的,否則將會報錯:
  • zsh: permission denied: ./test.sh
    解決方法是變更文件的權限:chmod +x test.sh 然後再執行就可以了。這種運行方式也是新建一個子 Shell 去執行腳本。
    有的讀者可能會問,系統怎麼知道這是 Shell 腳本而不是其他語言呢?實際上並不是通過文件名後綴來區分的,可以舉個例子:
  • #! /usr/bin/python
  • print “11”
    這裏用 Python 語法寫了一個腳本,但是後綴名保存爲 sh,如果我們直輸入名稱去執行,一樣可以得到正確的結果:
  • ./py.sh
  • 輸出 11

這裏的 #! 被稱爲 shebang,用來指定使用什麼解釋器去執行腳本。因此,規則可以簡單概括如下:

  1. 如果直接寫明瞭解釋器,比如 sh xxx.sh,會以顯式指定的解釋器爲準,shebang 不生效。
  2. 如果直接寫可執行文件的名字,則以 shebang 指定的解釋器爲準。
  3. 如果沒有指定 shebang,默認是 bash,不會參考文件名的後綴。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章