我有这样一个简单的剧本。
#!/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
命令的更多信息。