ssh远程变量赋值?

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 -xshell以回显正在执行的实际命令,以帮助进行故障排除.