sh是一個shell。運行sh a.sh,表示我使用sh來解釋這個腳本;如果我直接運行./a.sh,首先你會查找腳本第一行是否指定了解釋器,如果沒指定,那么就用當前系統默認的shell(大多數linux默認是bash),如果指定了解釋器,那么就將該腳本交給指定的解釋器
比如a.run文件內容是這個:
那么你如果運行./a.run,結果就是輸出一行文字,但是如果你運行sh a.run,會報錯
因為這是一個python腳本,sh看不懂(注意,linux下后綴通常不是很嚴格,.run后綴是隨意命名的).
你是寫了一個shell腳本,想問./a.sh和sh a.sh區別,這個要看你系統默認shell和腳本了,如果你寫的是一個sh ( Bourne shell )腳本而且第一行申明了解釋器為sh,那么沒區別,但是如果你寫的是一個bash(Bourne Again SHell) 腳本,那結果就可能有區別了,因為bash和sh的內置命令、語法等有些不一樣。
----------------------------------------------------補充一下----------------------------------------------------
我的測試環境是cantos 6.4
可以看到 sh其實就是bash,那么在這個發行版中,你如果你寫的是一個shell腳本,而且腳本第一行沒申明shell解釋器,那么使用./a.sh和sh a.sh並沒有什么區別
比如a.run文件內容是這個:
#!/usr/bin/python print("This is Python script")
[feishu@localhost tmp]$ ./a.run This is Python Script [feishu@localhost tmp]$ sh a.run a.run: line 2: syntax error near unexpected token `"This is Python Script"' a.run: line 2: `print("This is Python Script")'
你是寫了一個shell腳本,想問./a.sh和sh a.sh區別,這個要看你系統默認shell和腳本了,如果你寫的是一個sh ( Bourne shell )腳本而且第一行申明了解釋器為sh,那么沒區別,但是如果你寫的是一個bash(Bourne Again SHell) 腳本,那結果就可能有區別了,因為bash和sh的內置命令、語法等有些不一樣。
----------------------------------------------------補充一下----------------------------------------------------
我的測試環境是cantos 6.4
[feishu@localhost tmp]$ ls -al `which sh` lrwxrwxrwx. 1 root root 4 11月 23 20:41 /bin/sh -> bash [feishu@localhost ~]$ echo $SHELL /bin/bash