[英]Is it possible to add an alias to what bash version should be used when #!/bin/bash is specified in a shell script header?
我運行MacOS和iTerm2。 我目前已將iTerm2設置為使用在brew中安裝的不同版本的bash(bash版本4.4,MacOS本身未附帶)。 我可以通過運行echo $BASH_VERSION
並獲取4.4.23(1)-release
作為輸出來驗證這一點。
我有一個想要運行的大型bash腳本,但是在標題#! /bin/bash
#! /bin/bash
已定義。 由於某些原因,當我運行腳本時,會使用該路徑下的bash本機版本(3.2版)。
我真的不想更改此標頭,因為我們在生產環境和開發環境中都運行腳本(最重要的是,它可以在運行linux的生產服務器上運行)。 現在,在本地,我將其更改為/ usr / local / bin / bash使其工作,但是它將在git流中生成差異。
是否可以在iTerm中添加別名或類似名稱,以將/bin/bash
為/usr/local/bin/bash
或類似的技巧?
快速又臟
為什么不直接調用bash並將腳本作為參數?
/usr/local/bin/bash your_special_production_script.sh
您可以將shebang更改為#! /usr/bin/env bash
#! /usr/bin/env bash
。 該shebang也應在其他系統上運行。
唯一的區別是env bash
會在您的PATH
搜索bash
而不是完全使用/bin/bash
。 在Mac上配置PATH
,使其指向新的bash
版本。
為了確保使用正確的版本,可以在腳本的開頭添加一個檢查。 類似於
#! /usr/bin/env bash
versionLt() { [ "$(printf %s\\n "$@" | sort -V | head -n1)" = "$1" ]; }
if versionLt "$BASH_VERSION" 4.4; then
echo "Required bash 4.4 or higher but found bash $BASH_VERSION"
exit 2
fi
只要您具有該解釋器的路徑,甚至可以使用另一個解釋器重新啟動腳本。 參數和標准輸入將保留。
exec /path/to/new/version/of/bash "$0" "$@"
您可以遍歷可能的路徑列表並嘗試找到正確的版本,但是我認為使用evn bash
並設置PATH
是evn bash
的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.