【问题标题】:Bash skipping python commandsBash 跳过 python 命令
【发布时间】:2016-07-14 17:37:10
【问题描述】:

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

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

我使用bash myscript foo 之类的命令运行脚本,但在上面的当前代码中,只有命令会运行scl enable python33 bash,并且由于某种原因下一个 if 块不会被执行,但如果我删除了 @ 行987654324@ 然后 if 块中的代码可以毫无问题地执行。

起初我认为scl enable python33 bash 导致脚本退出,但事实并非如此,因为我可以在运行脚本之前和之后看到python -V,它按预期工作而没有错误。

由于某种原因,scl enable python33 bash 命令和 if 块似乎不属于脚本。

【问题讨论】:

  • scl 命令有什么作用?
  • @AvihooMamka 我有 python 2.7,默认情况下与 CentOs7 一起提供。所以,我安装了 python 3.3 并且scl enable python33 bash 使 python3.3 成为机器中的默认值,因为我的python script.py 你在问题中看到的那个只能与 python 3.3 一起运行
  • 为什么不直接从其位置运行python3?例如:/usr/bin/python3.3 script.py?
  • 由于某种原因,我的位于/opt/rh/python33/root/usr/bin/python3.3,但我想使用python foo.py,因为如果我运行 scl 命令我可以使用 python,我不知道为什么这个 shell 命令不是工作。
  • @ANW 你不能提供python33的完整路径而不是在shell脚本中只写“python”吗?

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


【解决方案1】:

它不能像你写的那样工作的原因是因为你正在创建一个新的 bash 进程,它激活了集合;因此您的论点没有按照您的预期进行解析。


scl 工具是 RedHat 的 software collections framework 的一部分。

由于安装软件的常规工具 (rpm) 在系统级别覆盖软件包,RedHat 将软件集合作为“虚拟环境”的一种形式提供,以便直接通过 RPM 安装多个版本的软件包。这些包被称为软件集合,都安装在/opt/rh/

激活包的scl工具的语法是:

scl enable nameofpackage command

您可以将多个包添加到列表中。

在您的脚本中,您只需将 Python 调用直接替换为 scl 行,如下所示:

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

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

【讨论】:

  • 嗯,那个脚本给了我这个错误Unable to open /etc/scl/conf/python!
  • 查看the documentation 传递命令;您也可以尝试将#!/bin/bash 替换为#!/bin/scl enable python33 bash 作为第一行,只需确认scl 二进制文件的位置,它可能在/usr/bin 或类似的地方。
  • 是的,我尝试使用它/usr/bin/scl scl 二进制文件所在的位置,并尝试运行 bash 脚本但没有任何结果。
  • 嗯,我认为你的答案是正确的,使用 scl enable python33 python script.py 虽然 script.py 需要更改为完整路径才能正常工作。
猜你喜欢
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 2020-01-02
  • 2021-03-16
  • 1970-01-01
相关资源
最近更新 更多