未通过ssh传递Bash脚本变量

未通过ssh传递Bash脚本变量,bash,Bash,我有一个bash脚本,ssh连接到服务器,并根据变量的状态执行任务: #!/bin/bash foo=$1 ssh user@host.com ' echo In host if [ "$foo" == "yes" ]; then echo "Foo!" fi ' 当我运行sh script.sh yes时,尽管ssh命令可以工作,但条件的计算结果为false。如果我echo$foo,我可以看到这一点-它打印一个空行。如何在ssh命令中访问foo的值?变量不会传输到远程计算机。您可以在

我有一个bash脚本,ssh连接到服务器,并根据变量的状态执行任务:

#!/bin/bash

foo=$1
ssh user@host.com '
echo In host
if [ "$foo" == "yes" ]; then
   echo "Foo!"
fi
'

当我运行
sh script.sh yes
时,尽管
ssh
命令可以工作,但条件的计算结果为false。如果我
echo$foo
,我可以看到这一点-它打印一个空行。如何在
ssh
命令中访问
foo
的值?

变量不会传输到远程计算机。您可以在通过ssh发送的代码中扩展变量,但必须非常小心,因为它为不受控制的代码执行打开了大门:

#!/bin/bash

foo=$1
ssh user@host.com '
echo In host
if [ "'"$foo"'" == "yes" ]; then
   echo "Foo!"
fi
'
现在想象一下(不要尝试)如果
foo='$(rm-rf/)'
会发生什么