以下内容对我不起作用:
ssh [email protected] /cdn-cgi/l/email-protection "k=5; echo $k;"
它只是返回一个空行。
如何在远程会话 (ssh) 上分配变量?
Note:我的问题是not关于如何将本地变量传递到我的 ssh 会话,而是如何创建和分配远程变量。 (应该是一个非常简单的任务?)
Edit:
更详细地说,我正在尝试这样做:
bkp=/some/path/to/backups
ssh [email protected] /cdn-cgi/l/email-protection "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
没有被填充。
所以我的猜测是这将是一个变量赋值问题,因为我认为我已经检查了其他所有内容......
鉴于此调用:
ssh [email protected] /cdn-cgi/l/email-protection "k=5; echo $k;"
本地 shell 正在扩展$k
(很可能没有设置)在执行之前ssh ...
。因此,一旦建立连接,实际传递到远程 shell 的命令是k=5; echo ;
(or k=5; echo something_else_entirely;
if k
实际上是本地设置的)。
为了避免这种情况,请像这样转义美元符号:
ssh [email protected] /cdn-cgi/l/email-protection "k=5; echo \$k;"
或者,使用单引号而不是双引号来防止本地扩展。然而,虽然这适用于这个简单的示例,但您实际上可能希望在发送到远程端的命令中对某些变量进行本地扩展,因此反斜杠转义可能是更好的路线。
为了将来参考,您还可以输入set -x
在 shell 中回显正在执行的实际命令,以帮助排除故障。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)