我正在嘗試在遠端伺服器上運行腳本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)。
為了顯示:
% 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: