Bash
這兩個 bash 環境有什麼區別?
我注意到,對於
bash
腳本,有些人使用的 shebang與我習慣放在自己頂部的 shebang 不同。有人可以簡化這兩者之間的區別嗎?我一直用那個
#!/bin/bash
。#!/bin/bash #!/usr/bin/env bash
腳本中的
#!/usr/bin/env bash
結果使用 .bash 文件中首先找到的任何 bash$PATH
。雖然 bash 通常位於
/bin/bash
. 在某些情況下它不是(不同的作業系統)。另一個潛在用途是安裝了多個 bash shell(在備用位置的較新版本,如/usr/local/bin/bash
)。這樣做
#!/usr/bin/env bash
只是利用了env
實用程序的行為。該
env
實用程序通常用於在呼叫程序時操作環境(例如,env -i someprog
將環境擦除乾淨)。但是,通過提供除要執行的程序以外的任何參數,它會導致執行指定的程序,如$PATH
.請注意,這樣做既有優點也有缺點。
優點如前所述,如果 bash 安裝在不同的位置,或者如果
/bin/bash
太舊而無法支持腳本試圖做的事情,它會使腳本可移植。缺點是你會得到不可預測的行為。由於您受使用者 的 支配
$PATH
,因此可能會導致腳本使用具有與腳本預期不同的行為的 bash 版本執行。