sh -c 不识别 heredoc 语法
sh -c doesn't recognize heredoc syntax
我认为下面的两个命令应该是相同的,但是鉴于 heredoc,shell 会产生错误。是否可以将 heredoc 传递给 sh 的 -c 参数?
heredoc 示例
/bin/sh -c <<EOF
echo 'hello'
EOF
# ERROR: /bin/sh: -c: option requires an argument
简单的字符串示例
/bin/sh -c "echo 'hello'"
# prints hello
命令不等价。
/bin/sh -c <<EOF
echo 'hello'
EOF
相当于
echo "echo 'hello'" | /bin/sh -c
或者,here-string:
/bin/sh -c <<< "echo 'hello'"
但 sh -c
需要一个参数。它适用于
echo "echo 'hello'" | /bin/sh
我尝试post将其作为评论,但格式化代码在评论中效果不佳。使用@Benjamin W. 接受的答案作为指导,我能够让它与这个片段一起工作
( cat <<EOF
echo 'hello'
EOF
) | /bin/sh
神奇之处在于 cat
如何处理输入。来自手册页:
If file is a single dash (`-') or absent, cat reads from the standard input.
因此 cat 可以将 stdin
重定向到 stdout
并且可以通过管道传输到 /bin/sh
我认为下面的两个命令应该是相同的,但是鉴于 heredoc,shell 会产生错误。是否可以将 heredoc 传递给 sh 的 -c 参数?
heredoc 示例
/bin/sh -c <<EOF
echo 'hello'
EOF
# ERROR: /bin/sh: -c: option requires an argument
简单的字符串示例
/bin/sh -c "echo 'hello'"
# prints hello
命令不等价。
/bin/sh -c <<EOF
echo 'hello'
EOF
相当于
echo "echo 'hello'" | /bin/sh -c
或者,here-string:
/bin/sh -c <<< "echo 'hello'"
但 sh -c
需要一个参数。它适用于
echo "echo 'hello'" | /bin/sh
我尝试post将其作为评论,但格式化代码在评论中效果不佳。使用@Benjamin W. 接受的答案作为指导,我能够让它与这个片段一起工作
( cat <<EOF
echo 'hello'
EOF
) | /bin/sh
神奇之处在于 cat
如何处理输入。来自手册页:
If file is a single dash (`-') or absent, cat reads from the standard input.
因此 cat 可以将 stdin
重定向到 stdout
并且可以通过管道传输到 /bin/sh