如何在遠端伺服器上執行帶有多字參數的本機腳本?

如何在遠端伺服器上執行帶有多字參數的本機腳本?

我正在嘗試在遠端伺服器上運行腳本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:

相關內容