scl 启用访问源 shell 个参数

scl enable access source shell arguments

我正在 shell 脚本中激活 scl python 环境,并希望根据参数对 virtualenv 进行一些自定义安装。但是,我无法将 shell/bash 脚本中的变量传递到激活 scl 环境时创建的 subshell 中。我如何访问 shell/bash 脚本中定义的参数?

$ARG=argument
scl enable rh-python36 << SS 
echo $ARG
SS

例如当我运行上面的脚本时,输出将是:

line 1: ARG: command not found

我对 scl 一点都不熟悉,但我可以指出一些你正在做的 shell 部分的错误:

  • $ 与变量一起使用以 获取 它们的值,而不是在设置它们时。因此,$ARG=argument 应该是 ARG=argument。顺便说一句,你给出的错误信息实际上与这个问题不符;它看起来更像是 = 周围的空格(例如 ARG = argument),这是不允许的,因为它会将 ARG 视为命令,而“=" 和 "argument" 作为传递给它的参数。一般来说,空格是 shell 中的重要分隔符,添加或删除它们 - 即使在看起来不重要的地方 - 也可以完全改变命令的含义。

  • 默认情况下,变量对 shell 本身是私有的。要使该变量可用于 scl(以及您在 shell 中 运行 的任何其他命令),您需要 export 它。因此,你实际上想要:

    export ARG=argument
    
  • 我建议不要使用全部大写的变量名,因为有许多全大写的名称具有特殊含义;将其中一个用于其他用途可能会产生奇怪的效果。小写和混合大小写的变量名更安全。

  • 在常规的 here-document 中(<< SS 打开的部分),shell 将在将文档发送到程序之前扩展 $variable 表达式。如果您希望将 $ 表达式发送到程序以供 it 解释,您需要引用 here-doc 定界符(例如 << "SS"),或反斜杠转义文档中的所有美元符号、反引号和反斜杠字符。