Bash跳过python命令

时间:2016-03-27 09:21:43

标签: linux bash python-2.7 shell python-3.x

我有一个像这样的简单脚本。

#!/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块似乎不属于脚本。

1 个答案:

答案 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命令的更多信息。