Pit*_*itt 9 unix variables ssh
以下内容对我不起作用:
ssh user@remote.server "k=5; echo $k;"
Run Code Online (Sandbox Code Playgroud)
它只返回一个空行.
如何在远程会话(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;"
Run Code Online (Sandbox Code Playgroud)
find命令工作正常,但由于某种原因$bkps
没有填充.所以我的猜测是,这将是一个变量赋值问题,因为我认为我已经检查了其他所有内容......
twa*_*erg 16
鉴于此调用:
ssh user@remote.server "k=5; echo $k;"
Run Code Online (Sandbox Code Playgroud)
本地shell $k
在执行之前正在扩展(很可能没有设置)ssh ...
.所以,实际上被传递到远程shell一旦连接成功,命令k=5; echo ;
(或者k=5; echo something_else_entirely;
,如果k
是实际在本地设置).
为了避免这种情况,请像这样逃避美元符号:
ssh user@remote.server "k=5; echo \$k;"
Run Code Online (Sandbox Code Playgroud)
或者,使用单引号而不是双引号来阻止本地扩展.然而,虽然这可以在这个简单的例子中起作用,但实际上你可能希望在发送到远程端的命令中局部扩展一些变量,因此反斜杠转义可能是更好的路径.
为了将来参考,您还可以键入set -x
shell以回显正在执行的实际命令,以帮助进行故障排除.
归档时间: |
|
查看次数: |
10527 次 |
最近记录: |