Bash関数で2番目のパラメータを渡す方法

Bash関数で2番目のパラメータを渡す方法

まず、リモートデスクトップに接続してからリモートデスクトップのコマンドラインに接続するときに2番目の引数を使用したいとしますbash function。これが一重引用符を使用する理由です。しかし、この問題をどのように理解するのかわかりません。$2議論。

my_func () {
ssh blah blah blah $1 'cd $2'
}

2番目のパラメータをどのように指定するのかわかりません。私のローカルコンピュータでこの機能を実行してみました。 my_func a bここで、bはリモートデスクトップのディレクトリですが、期待した結果が得られないようです。

ベストアンサー1

$2リモートユーザーのログインシェルに適した方法で引用する必要があります。たとえば、Bourneに似ているとします。

shquote() {
  LC_ALL=C awk -v q=\' '
    BEGIN{
      for (i=1; i<ARGC; i++) {
        gsub(q, q "\\" q q, ARGV[i])
        printf "%s ", q ARGV[i] q
      }
      print ""
    }' "$@"
}

my_func () {
  ssh blah blah blah "$1" "cd -- $(shquote "$2")"
}

たとえば、これはBourneに似たリモートシェルでディレクトリ引数を使用して実行されると解釈されるコマンドラインにshquote()変換されます。Stephane's dir'Stephane'\''s dir'cd -- 'Stephane'\''s dir'cdStephane's dir

それにもかかわらず、リモートホストでシェルを実行してもcd有用な結果は生成されません。

追加の読み取り(およびリモートユーザーのログインシェルがBourneのログインシェルと異なる場合を含む追加オプション):リモートユーザーのログインシェルを知らず、SSHを介して任意の単純なコマンドをどのように実行できますか?

おすすめ記事