在Linux終端機中執行bash腳本時,「bash foo.sh
」和「./foo.sh
」之間有區別嗎?或者它們只是執行相同功能的兩種不同方式?
答案1
如果滿足以下條件,它們可能是等效的:./foo.sh
- 是可執行的,並且
- 開頭為
#!/bin/bash
(或同等內容)
否則,考慮到您描述的前提條件(foo.sh
是 bash 腳本),該./foo.sh
版本很可能會失敗,因為它沒有使用者的執行權限,或者因為它是由/bin/sh
而不是/bin/bash
(/bin/sh
是預設的腳本解釋器)解釋的。
答案2
除了 Tobys 的回答之外,我想指出,在呼叫「bash foo.sh」之前,應該檢查腳本中現有的 shebang bash 參數(如 #!/bin/bash -e)。透過「bash foo.sh」呼叫腳本不會關心 shebang 中現有的 bash 參數。
答案3
人們已經在這裡解釋過,但簡單來說bash foo.sh
意味著 foo.sh 將在 bash shell 中執行。
它只是告訴核心將使用哪個 shell 腳本來運行腳本並在腳本中進行任何更改的一種方法。