scl启用访问源外壳参数

时间:2018-08-20 01:39:34

标签: bash shell redhat

我正在外壳程序脚本中激活scl python环境,并希望基于参数对virtualenv进行一些自定义安装。但是,我不能将变量从shell / bash脚本传递到激活scl环境时创建的子shell中。如何访问shell / bash脚本中定义的参数?

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

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

line 1: ARG: command not found

1 个答案:

答案 0 :(得分:1)

我对scl一点都不熟悉,但是我可以指出一些与您正在执行的shell部分有关的事情:

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

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

    export
  • 我建议不要使用全大写字母的变量名,因为有许多全大写字母的名称具有特殊含义;将其中之一用于其他用途会产生怪异的效果。小写和大小写混合的变量名比较安全。

  • 在常规的Here文档(export ARG=argument 打开的部分)中,外壳程序将展开<< SS表达式,然后再将文档发送给程序。如果您希望将$variable表达式发送到程序中以便 it 进行解释,则需要引用here-doc分隔符(例如$)或反斜杠-转义文档中的所有美元符号,反引号和反斜杠字符。