ssh远程变量赋值?

时间:2012-10-23 14:11:18

标签: unix variables ssh

以下内容对我不起作用:

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没有填充。 所以我的猜测是,这将是一个变量赋值问题,因为我认为我已经检查了其他所有内容......

1 个答案:

答案 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以回显正在执行的实际命令,作为故障排除的帮助。