加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix – ssh远程变量赋值?

发布时间:2020-12-16 01:20:17 所属栏目:安全 来源:网络整理
导读:以下内容对我不起作用: ssh user@remote.server "k=5; echo $k;" 它只返回一个空行. 如何在远程会话(ssh)上分配变量? 注意:我的问题不是关于如何将局部变量传递给我的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没有填充.
所以我的猜测是,这将是一个变量赋值问题,因为我认为我已经检查了其他所有内容……

鉴于此调用:
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以回显正在执行的实际命令,以作为故障排除的帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读