有没有可能添加一个别名到应该使用的bash版本/是否在shell脚本头中指定bin/bash?

有没有可能添加一个别名到应该使用的bash版本/是否在shell脚本头中指定bin/bash?,bash,macos,iterm2,Bash,Macos,Iterm2,我运行MacOS和iTerm2。我目前已将iTerm2设置为使用brew bash 4.4版安装的不同版本的bash,该版本不是MacOS自带的。我可以通过运行echo$BASH_版本并获得4.4.231-release作为输出来验证这一点 我有一个巨大的bash脚本,我想运行,但在标题/定义了bin/bash。出于某种原因,当我运行脚本时,正在使用bash版本3.2的本机版本,该版本位于该路径 我真的不想更改这个标题,因为我们在生产环境和开发环境中运行脚本。最重要的是,它可以在运行linux的

我运行MacOS和iTerm2。我目前已将iTerm2设置为使用brew bash 4.4版安装的不同版本的bash,该版本不是MacOS自带的。我可以通过运行echo$BASH_版本并获得4.4.231-release作为输出来验证这一点

我有一个巨大的bash脚本,我想运行,但在标题/定义了bin/bash。出于某种原因,当我运行脚本时,正在使用bash版本3.2的本机版本,该版本位于该路径

我真的不想更改这个标题,因为我们在生产环境和开发环境中运行脚本。最重要的是,它可以在运行linux的生产服务器上运行。现在,在本地,我将其更改为/usr/local/bin/bash以使其工作,但它将在我的git流中生成差异

是否可以在iTerm中添加一个别名或类似的别名,将/bin/bash转换为/usr/local/bin/bash,或使用类似的技巧?

quick&dirty

为什么不调用bash direct和脚本作为参数呢

/usr/local/bin/bash your_special_production_script.sh
又快又脏

为什么不调用bash direct和脚本作为参数呢

/usr/local/bin/bash your_special_production_script.sh

你可以把雪邦换成/usr/bin/env bash。这个shebang也应该在其他系统上运行

唯一的区别是env bash将在您的路径中搜索bash,而不是使用/bin/bash。在Mac上配置路径以指向新的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
甚至可以使用另一个解释器重新启动脚本,只要您拥有该解释器的路径。将保留参数和stdin

exec /path/to/new/version/of/bash "$0" "$@"

您可以迭代一系列可能的路径,并尝试找到正确的版本,但我认为使用evn bash和设置路径是一种方法。

您可以将shebang更改为/usr/bin/env bash。这个shebang也应该在其他系统上运行

唯一的区别是env bash将在您的路径中搜索bash,而不是使用/bin/bash。在Mac上配置路径以指向新的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
甚至可以使用另一个解释器重新启动脚本,只要您拥有该解释器的路径。将保留参数和stdin

exec /path/to/new/version/of/bash "$0" "$@"
您可以迭代可能的路径列表,并尝试找到正确的版本,但我认为使用evn bash和设置路径是一种方法