脚本必须将其中的所有内容记录到输出和日志文件中
像这样,它就可以正常工作:
#!/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