Bash

這兩個 bash 環境有什麼區別?

  • October 5, 2013

我注意到,對於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 版本執行。

引用自:https://unix.stackexchange.com/questions/93644