heredocまたは他の技術を使用した単一文字列パラメータの生成

heredocまたは他の技術を使用した単一文字列パラメータの生成

リモートサーバーでスクリプトを実行し、スクリプトを最後のパラメータとして渡そうとします。

ntrs exec-all-ubuntu --exec `cat << 'EOF'

  echo "$(pwd)"
  echo "$foobar"

EOF`

これ質問テキスト内の値は別のパラメータとして送信され、echoが最初のパラメータであり、pwd値が2番目の別々のパラメータであるため、文字列として1つのパラメータのみが必要です。

パラメータは次のように表示されます。

[ '--exec', 'echo', '"$(pwd)"', 'echo', '"$foobar"' ]

しかし、私は改行文字を含む文字通りのコンテンツを探しています。

[ '--exec', '   echo "$(pwd)"\n\n echo "$foobar"\n ' ]

私もこれを使ってみました。

ntrs exec-all-ubuntu --exec `read -d << EOF
    select c1, c2 from foo
    where c1='something'
EOF`

しかし、文字列は空です

答え1

改行文字を含む一般的な文字列を簡単に使用できます。

ntrs exec-all-ubuntu --exec '
  echo "$(pwd)"
  echo "$foobar"
'

答え2

マニュアルページからbash(1)

The format of here-documents is:

      [n]<<[-]word
              here-document
      delimiter

No parameter and variable expansion, command substitution, arithmetic
expansion, or pathname expansion is performed on word.  If any part of
word is quoted, the delimiter is the result of quote removal on word,
and the lines in the here-document are not expanded.

あなたの投稿がタグ付けされているので私は以下をお勧めします:

ntrs exec-all-ubuntu --exec "$(cat << 'EOF'

  echo "$(pwd)"
  echo "$foobar"

EOF
)"

ついに、

echo "$(pwd)"

簡単に言えば、より良いかもしれません。

pwd

答え3

Jim L.の言葉が正しい。しかし、もっと簡単な方法がありますか?

ntrs exec-all-ubuntu --exec "`cat << 'EOF'

  echo "$(pwd)"

  echo "$foobar"

EOF
`"

バックティックの周りの二重引用符は正しいアプローチですか?

関連情報