繁体   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