我正在外壳程序脚本中激活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
答案 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分隔符(例如$
)或反斜杠-转义文档中的所有美元符号,反引号和反斜杠字符。