使用heredoc或其他技术创建单个字符串参数

使用heredoc或其他技术创建单个字符串参数

我正在尝试在远程服务器上执行脚本,并将脚本作为最后一个参数传递

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`

但该字符串是空的

答案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
`"

反引号周围的双引号是正确的方法吗?

相关内容