如何在远程服务器上运行带有多字参数的本地脚本?

如何在远程服务器上运行带有多字参数的本地脚本?

我正在尝试在远程服务器上运行脚本test.sh(位于我的本地计算机上)。test.sh接受一个经常有多个单词的论点。

测试.sh:

#!/bin/bash
while getopts b: opt;
do
  case $opt in
    b)
       bval="$OPTARG"
       ;;
  esac
done
echo $bval

它在我的本地机器上运行良好:

./test.sh -b "multi word arg"

输出:

multi word arg

但是当我在远程服务器上运行它时,如下所示:

ssh -A user@remotehost "bash -s" -- < ./test.sh -b "multi word arg"

我只得到:

multi

关于如何将完整的多字参数传递给脚本有什么想法吗?

答案1

您需要另一级别的报价:'"multi word arg"'

第一层引号被本地 shell 删除,并ssh获取multi word arg.然后ssh,在远程系统上,运行类似的东西$SHELL -c "bash -s -- -b multi word arg"$SHELL你的登录 shell 在哪里,最有可能是 bash)。然后,登录 shell 会删除引号(无需删除)和分词,这就是你得到一个单词的原因。

为了显示:

% ssh 192.168.0.2 'printf :%s:\\n' '"foo bar baz"'
:foo bar baz:
% ssh 192.168.0.2 'printf :%s:\\n' 'foo bar baz'
:foo:
:bar:
:baz:

相关内容