我想在shell脚本中使用ssh的变量。 假设我有一些变量a我在ssh中的值,现在我想在shell本身的ssh之外使用该变量,我该怎么做?
ssh my_pc2 <<EOF
<.. do some operations ..>
a=$(ls -lrt | wc -l)
echo \$a
EOF
echo $a
在上面的示例中,ssh内部的第一个echo print 10打印10,但第二个echo $ a不打印任何内容。
答案 0 :(得分:1)
我会通过定义一些特殊语法来优化最后一个答案,以便将所需的设置传回去,例如: &#34; #SET var=value
&#34;
我们可以将命令(我们想要在ssh会话中运行)放在cmdFile
文件中,如下所示:
a=`id`
b=`pwd`
echo "#SET a='$a'"
echo "#SET b='$b'"
主脚本看起来像这样:
#!/bin/bash
# SSH, run the remote commands, and filter anything they passed back to us
ssh user@host <cmdFile | grep "^#SET " | sed 's/#SET //' >vars.$$
# Source the variable settings that were passed back
. vars.$$
rm -f vars.$$
# Now we have the variables set
echo "a = $a"
echo "b = $b"
如果您为大量变量执行此操作,可以向cmdFile添加一个函数,以简化/封装您传递数据的特殊语法:
passvar()
{
var=$1
val=$2
val=${val:-${!var}}
echo "#SET ${var}='${val}'"
}
a=`id`
passvar a
b=`pwd`
passvar b
当值包含空格时,您可能需要使用引号。
答案 1 :(得分:0)
这样的脚本可用于将来自SSH的输出 all 存储到变量中:
#!/bin/bash
VAR=$(ssh user@host << _EOF
id
_EOF)
echo "VAR=$VAR"
它产生输出:
VAR=uid=1000(user) gid=1000(user) groups=1000(user),4(adm),10(wheel)