我正在尝试在远程服务器上执行脚本,并将脚本作为最后一个参数传递
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
`"
反引号周围的双引号是正确的方法吗?