リモートサーバーで複数の単語パラメータを使用してローカルスクリプトを実行するには?

リモートサーバーで複数の単語パラメータを使用してローカルスクリプトを実行するには?

test.shリモートサーバー(私のローカルコンピュータにある)でスクリプトを実行しようとしています。test.sh多くの場合、2つ以上の単語で構成される主張を受け入れます。

テスト.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"'

引用符の最初のレイヤーはローカルシェルによって削除され、インポートさsshれますmulti word arg。その後、sshリモートシステムで同様の操作を実行します$SHELL -c "bash -s -- -b multi word arg"$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:

おすすめ記事