我有这样一个简单的剧本。

#!/bin/bash
scl enable python33 bash
args=$#
if [[ $args -eq 1 ]]; then
    python script.py
fi

我使用类似于bash myscript foo的命令运行脚本,但是在上面的当前代码中,只有该命令将运行scl enable python33 bash,并且出于某种原因,下一个if块将不会执行,但是如果我删除行scl enable python33 bash,则if块中的代码将毫无问题地执行。
起初,我认为scl enable python33 bash导致脚本退出,但事实并非如此,正如我在运行脚本之前和之后所看到的python -V,它没有错误地工作。
出于某种原因,scl enable python33 bash命令和if块似乎不属于脚本。

最佳答案

它不能像您所写的那样工作的原因是,您正在派生一个新的bash进程,该进程激活了集合;因此,您的参数没有按您预期的那样被解析。
scl工具是RedHatsoftware collections framework的一部分。
作为安装软件(rpm)的常规工具,RedHat在系统级覆盖软件包,它提供了一种“虚拟环境”形式的软件集合,以便直接通过rpm安装多个版本的软件包这些软件包称为软件集合,都安装在/opt/rh/中。
激活包的scl工具的语法是:

scl enable nameofpackage command

您可以将多个包添加到列表中。
在脚本中,您只需直接用scl行替换Python调用,如下所示:
#!/bin/bash
args=$#
if [[ $args -eq 1 ]]; then
    scl enable python33 python script.py
fi

您可以在documentation reference上阅读有关scl命令的更多信息。

08-07 12:07