[英]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.