Bash

使用 heredoc 或其他技術創建單個字元串參數

  • May 14, 2019

我正在嘗試在遠端伺服器上執行腳本,將腳本作為最後一個參數傳遞

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

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

EOF`

問題是文本中的值作為單獨的參數發送,echo 是第一個參數,pwd 值是第二個單獨的參數,但我只想要一個參數作為字元串

論點最終看起來像這樣:

[ '--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`

但是那個字元串是空的

您可以簡單地使用帶有嵌入換行符的正常字元串:

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

從手冊頁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.

鑑於您的文章被標記為bash我建議:

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

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

EOF
)"

最後,

echo "$(pwd)"

可能會更好:

pwd

引用自:https://unix.stackexchange.com/questions/518928