我很困惑为什么下面的 bash 脚本会挂在 CentOS6.4 中
/bin/cat >> /root/heredoc <<EOF
if [ $(grep -c "$IP_ADDR\|$HOSTNAME" $HOSTS_FILE) -ne 0 ]; then
EOF
如果此处文档的内容没有意义,请不要担心。我只是取出了使脚本挂起的代码行。我绝对缺乏对 bash 如何处理此处文档的了解。它不是管道(垂直条),因为它在没有管道的情况下仍然挂起。
我希望内容作为文字字符串。不需要对内容进行处理或评估。
如果您希望内容为文字文本,请尝试以下操作:
/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)
问题是$( grep ... )
。默认情况下,HERE 文档被解释为双引号字符串,这意味着grep
已执行。$HOSTS_FILE 可能为空,因此 grep 正在等待标准输入(尝试按Ctrl+D)。