以下内容对我不起作用:
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没有填充.
所以我的猜测是,这将是一个变量赋值问题,因为我认为我已经检查了其他所有内容……
鉴于此调用:
ssh user@remote.server "k=5; echo $k;"
在执行ssh之前,本地shell正在扩展$k(很可能没有设置).因此,一旦建立连接,实际传递给远程shell的命令是k = 5;回声; (或k = 5; echo something_else_entirely;如果k实际上是在本地设置的).
为避免这种情况,请像这样逃避美元符号:
ssh user@remote.server "k=5; echo \$k;"
或者,使用单引号而不是双引号来阻止本地扩展.但是,虽然这可以用于这个简单的示例,但实际上您可能希望在发送到远程端的命令中对某些变量进行局部扩展,因此反斜杠转义可能是更好的路径.
为了将来参考,您还可以在shell中键入set -x以回显正在执行的实际命令,以作为故障排除的帮助.