bash heredoc 和代码块

bash heredoc 和代码块

脚本必须将其中的所有内容记录到输出和日志文件中

像这样,它就可以正常工作:

#!/usr/bin/env bash

some_command_1
((
echo "Some text (in parenthness too)"
echo "Another text without them"
) &2>1 )|tee log.txt
some_command_2
exit 0

它按预期输出到 stdin/stderr 和日志文件。

但是这个脚本:

#!/usr/bin/env bash

some_command_1
((
cat <<EOF
Some text (in parenthness too)
Another text without them

EOF
) &2>1 )|tee log.txt
some_command_2
exit 0

产生错误:

警告:此处文档第 9 行由文件末尾分隔(需要“EOF”)

另一个没有它们的文本:未找到命令

./tmp.sh:第 11 行:EOF:未找到命令

像这样转义“(”没有任何作用。

为什么?

答案1

我认为问题出在包含 的行中((。这个双括号在 bash 中具有特殊含义。如果我将括号分成单独的行,您的脚本在 Linux 中对我有效。

#!/usr/bin/env bash

echo Start
(
(
cat <<XEOF
Some text (in parenthness too)
Another text without them

XEOF

) &2>1 )|tee log.txt
echo Stop
exit 0

相关内容