我正在尝试在远程服务器上运行脚本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: