我有一个像这样的简单脚本。
#!/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块似乎不属于脚本。
答案 0 :(得分:1)
它之所以无法正常工作的原因是因为你要求一个新的bash进程,它已经激活了集合;因此你的论点没有像你期望的那样被解析。
scl
工具是RedHat software 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
命令的更多信息。