export DUO="TESTKEY"
我可以运行以下命令:
salt computer chocolatey.install app args='/S /V" /qn '"$DUO"'"'
这实际上将产生一个命令,例如:
'/S /V" /qn TESTKEY"'
它输出我想要的环境变量。我现在正在运行一个bash脚本,该脚本从用户那里获取环境变量并将其放在字符串中:
#!/bin/bash echo "What env do you want to use?: " read env i="\$${env}" echo $i salt computer chocolatey.install app args='/S /V" /qn '"${i@Q}"'"'
我的Bash脚本接受用户输入,并自动在其前面放置一个'$'。如果用户输入“ DUO”,该命令将运行为:
'/S /V" /qn '$DUO'"'
但是我希望它运行此:
'/S /V" /qn TESTKEY"'
在Bash脚本中,如何在命令运行时正确地转义i变量,以便它调用环境变量$ DUO?UPDATE
这是我实际的SaltStack命令:
sudo salt computername chocolatey.install duo override_args=True install_args='/S /V" /qn HOST="xxxxxxx.com" RDPONLY="#0" '"$DUO"'"'
输出:
computername: Chocolatey v0.10.15 Installing the following packages: duo By installing you accept licenses for the packages. duo v0.3 duo package files install completed. Performing other installation steps. Installing Duo... Overriding package arguments with '/S /V" /qn HOST="xxxxxxx.com" RDPONLY="#0" TESTKEY"' (replacing '/S /V" /qn HOST="xxxxxxx.com" RDPONLY="#0" "') Duo has been installed. The install of duo was successful. Software installed as 'EXE', install location is likely default. Chocolatey installed 1/1 packages. See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
UPDATE 2
我在调试时运行了该脚本,而Bash脚本实际上以以下方式运行它:
+ salt 'computername' chocolatey.install duo override_args=True 'install_args=/S /V" /qn HOST="xxxxx.com" RDPONLY="#0" '\''$DUO'\''"'
UPDATE 3
我尝试扩展变量名,但出现错误。
bad substitution
例如,这给了我这个错误:
#!/bin/bash echo "What env do you want to use?: " read env i="\$${env}" echo "${!i}"
${!env}
扩展到$env
中命名的变量。]>在这里使用
DUO=TESTKEY
env=DUO
set -x # enable tracing; below : causes us to just trace the command and not run it
: sudo salt computername chocolatey.install duo override_args=True install_args='/S /V" /qn HOST="xxxxxxx.com" RDPONLY="#0" '"${!env}"'"'
...产生输出作为您正常运行的Chocolatey命令的示例,无替代:完全相同
DUO=TESTKEY
set -x # enable tracing; below : causes us to just trace the command and not run it
: sudo salt computername chocolatey.install duo override_args=True install_args='/S /V" /qn HOST="xxxxxxx.com" RDPONLY="#0" '"${DUO}"'"'