在这里doc时,Bash语句会挂起

时间:2013-07-11 21:01:48

标签: linux bash hang heredoc

我很沮丧为什么以下bash脚本会在CentOS6.4中挂起

/bin/cat >> /root/heredoc <<EOF

    if [ $(grep -c "$IP_ADDR\|$HOSTNAME" $HOSTS_FILE) -ne 0 ]; then
EOF

如果此处doc的内容没有意义,请不要担心。我只是拿出了使脚本挂起的代码行。我绝对不了解bash如何处理这里的文档。这不是管道(垂直条),因为它仍然没有管道挂起。

2 个答案:

答案 0 :(得分:2)

  

我想将内容作为文字字符串。没有处理或评估   内容是理想的。

如果您希望将内容作为文字文字,请尝试以下操作:

/bin/cat >> /root/heredoc << 'EOF'

    if [ $(grep -c "$IP_ADDR\|$HOSTNAME" $HOSTS_FILE) -ne 0 ]; then
whatever you have

EOF

注意,单引用了heredoc 'EOF'

这是一个例子:

kent$  cat << eof
$(echo $HOME)
eof
/home/kent

kent$  cat << 'eof'
$(echo $HOME)
eof
$(echo $HOME)

答案 1 :(得分:1)

问题是$( grep ... )。默认情况下,HERE文档被解释为双引号字符串,这意味着grep被执行。 $ HOSTS_FILE可能为空,因此grep正在等待标准输入(尝试按 Ctrl + D )。