我很沮丧为什么以下bash脚本会在CentOS6.4中挂起
/bin/cat >> /root/heredoc <<EOF
if [ $(grep -c "$IP_ADDR\|$HOSTNAME" $HOSTS_FILE) -ne 0 ]; then
EOF
如果此处doc的内容没有意义,请不要担心。我只是拿出了使脚本挂起的代码行。我绝对不了解bash如何处理这里的文档。这不是管道(垂直条),因为它仍然没有管道挂起。
答案 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 )。