将远程变量的值分配给unix / linux中的本地变量

时间:2014-02-24 01:29:25

标签: unix

我正在创建一个远程变量,其值要分配给unix中的局部变量。这是代码     #!/斌/庆典

INPUT= "test"
ssh username@domain.com
"if [ -s $INPUT ];
then
    date=\`date\`
    remote= $INPUT.date
    $INPUT= \$remote
else
    mkdir $INPUT
fi"

基本上我正在为局部变量赋值。在ssh到远程服务器时,我正在检查是否存在名为“test”的非空目录。如果是,那么我将时间戳附加到$ INPUT局部变量。代码工作正常,直到第8行“remote = $ INPUT.date”。但是将远程变量\ $ remote分配给局部变量$ INPUT则不行。我究竟做错了什么。谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

正如Rup所说,远程shell无法设置本地shell变量。您需要通过打印远程变量并使用命令替换来捕获它。这个SSH命令将执行您要执行的操作,然后它将回显您要存储在$ INPUT中的修改值:

INPUT="test"
ssh user@remotehost "if [ -s $INPUT ]; then 
timestamp=\$(date)
echo "${INPUT}.\${timestamp}"
fi"

输出:

test.Monday, 24 February 2014 11:26:41 GMT

如果要更改$ INPUT,则需要使用整个SSH命令作为命令替换:

INPUT="test"
INPUT=$(ssh user@remotehost "if [ -s $INPUT ]; then 
timestamp=\$(date)
echo "${INPUT}.\${timestamp}"
fi")

输出:

$> echo $INPUT
test.Monday, 24 February 2014 11:27:47 GMT

同样,如果要将变量存储在txt文件中,则会将其存储在远程主机上:

ssh user@remotehost "echo \$remote > file.txt"

这会将其存储在本地:

ssh user@remotehost "echo \$remote" > file.txt