以下内容对我不起作用:
ssh user@remote.server "k=5; echo $k;"
它只返回一个空行。
如何在远程会话(ssh)上分配变量?
注意:我的问题是不关于如何将局部变量传递给我的ssh会话,而是如何创建和分配远程变量。 (应该是一个非常直接的任务?)
修改
我正在尝试这样做:
bkp=/some/path/to/backups
ssh user@remote.server "bkps=( $(find $bkp/* -type d | sort) );
echo 'number of backups: '${#bkps[@]};
while [ ${#bkps[@]} -gt 5 ]; do
echo ${bkps[${#bkps[@]}-1]};
#rm -rf $bkps[${#bkps[@]}-1];
unset bkps[${#bkps[@]}-1];
done;"
find命令工作正常,但由于某种原因$bkps
没有填充。
所以我的猜测是,这将是一个变量赋值问题,因为我认为我已经检查了其他所有内容......
答案 0 :(得分:16)
鉴于此调用:
ssh user@remote.server "k=5; echo $k;"
本地shell在执行$k
之前正在扩展ssh ...
(很可能未设置)。因此,在建立连接后实际传递给远程shell的命令是k=5; echo ;
(如果实际在本地设置了k=5; echo something_else_entirely;
,则为k
。
为了避免这种情况,请像这样逃避美元符号:
ssh user@remote.server "k=5; echo \$k;"
或者,使用单引号而不是双引号来阻止本地扩展。然而,虽然这可以用于这个简单的例子,但实际上你可能希望在发送到远程端的命令中局部扩展一些变量,因此反斜杠转义可能是更好的路径。
为了将来参考,您还可以在shell中键入set -x
以回显正在执行的实际命令,作为故障排除的帮助。