我正在创建一个远程变量,其值要分配给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则不行。我究竟做错了什么。谢谢你的帮助。
答案 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