在Linux終端機中,「bash foo.sh」和「./foo.sh」之間有區別嗎

在Linux終端機中,「bash foo.sh」和「./foo.sh」之間有區別嗎

在Linux終端機中執行bash腳本時,「bash foo.sh」和「./foo.sh」之間有區別嗎?或者它們只是執行相同功能的兩種不同方式?

答案1

如果滿足以下條件,它們可能是等效的:./foo.sh

  1. 是可執行的,並且
  2. 開頭為#!/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 腳本來運行腳本並在腳本中進行任何更改的一種方法。

相關內容