2

我很困惑为什么下面的 bash 脚本会挂在 CentOS6.4 中

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

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

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

4

2 回答 2

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)
于 2013-07-11T21:28:10.457 回答
1

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

于 2013-07-11T21:09:11.707 回答