首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过ssh传递带有引号的参数

如何通过ssh传递带有引号的参数
EN

Stack Overflow用户
提问于 2018-07-24 14:35:38
回答 1查看 403关注 0票数 0

当我在Linux服务器中运行脚本时,如下所示:

代码语言:javascript
复制
./myscript \"hello\"

然后,脚本以"hello"的形式接收参数。现在,我希望能够通过ssh从另一个主机远程运行这个脚本。如果ssh连接是Linux到Linux,下面的工作如下:

代码语言:javascript
复制
ssh remote-host ./myscript \\\"hello\\\"

但是,如果ssh连接是Windows 10到Linux的话。以上操作无效,远程脚本接收参数为\hello“--注意额外的反斜杠和缺少的双引号。

代码语言:javascript
复制
ssh remote-host ./myscript \\\"hello\\\"
ssh remote-host ./myscript ^"hello^"
ssh remote-host ./myscript ""hello""
ssh remote-host ./myscript '"hello"'

我能想到的唯一解决办法是创建另一个shell脚本,它包含:

代码语言:javascript
复制
./myscript \"hello\"

然后将脚本scp到远程Linux服务器,并在那里执行它。那么,我是否有办法恰当地引用我的论点呢?

EN

回答 1

Stack Overflow用户

发布于 2022-02-17 13:34:09

您可以使用以下方便的包装脚本ssh.sh

代码语言:javascript
复制
cat <<'EOF' > ssh.sh
#!/bin/bash

function escape() {
  for arg in "$@"; do
    printf "%q " "$arg"
  done
}

ssh $(escape "$@")
EOF

chmod +x ssh.sh

然后,您可以通过ssh.sh安全地调用ssh,而不必担心逃脱。

例如,

代码语言:javascript
复制
./ssh.sh host sh -c 'ls /'

与标准的ssh相比,

代码语言:javascript
复制
ssh host sh -c 'ls /'

不起作用,它需要转换为

代码语言:javascript
复制
ssh host sh -c \'ls /\'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51501339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档