リモートサーバーでスクリプトを実行し、スクリプトを最後のパラメータとして渡そうとします。
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
`"
バックティックの周りの二重引用符は正しいアプローチですか?