【问题标题】:Preventing expansion/evaluation of parameter in ssh command防止在 ssh 命令中扩展/评估参数
【发布时间】:2018-11-14 11:13:33
【问题描述】:

我有一个在远程服务器上运行 docker 容器的 shell 脚本。

我正在尝试将远程服务器的主机名发送到容器中,但我只是获取了运行脚本的本地计算机的主机名。

该命令在脚本中如下所示:

ssh $remote "docker run -h '`hostname`' \
                        -e 'VARIABLE=$SCRIPT_VAR' \
                        -e 'HOST_HOSTNAME=`hostname`' \
                        ..."

主机名和环境变量 host.hostname 都成为我本地计算机的名称。

我知道我可以像这样使用单引号:

ssh $remote 'echo "`hostname`"'

它会起作用的。但是我不能使用像$SCRIPT_VAR这样的脚本变量

我怎样才能让它在远程服务器上进行评估,同时还能使用变量?

【问题讨论】:

  • 为什么投反对票?
  • 不是重复的。我知道区别。我只是想要介于两者之间的东西。不过我想我自己也想出来了。
  • 您的“解决方案”未引用$SCRIPT_VAR,如果它包含空格,可能会破坏您的命令。
  • 请将答案放在答案块中。稍后,您可以接受自己的答案。另见How does accepting an answer work?

标签: linux shell ssh


【解决方案1】:

您仍然需要确保$SCRIPT_VAR的扩展被引用,以防止它被分词或路径名扩展。

ssh $remote 'docker run -h "$(hostname)" \
                        -e "VARIABLE='"$SCRIPT_VAR"'" \
                        -e "HOST_HOSTNAME=$(hostname)" \
                        ...'

【讨论】:

    猜你喜欢
    • 2020-09-13
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    相关资源
    最近更新 更多