簡體   English   中英

在shell腳本頭中指定#!/ bin / bash時,是否可以為應該使用的bash版本添加別名?

[英]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並設置PATHevn bash的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM