【发布时间】:2014-08-29 07:29:55
【问题描述】:
我正在使用:
cat <<<"${MSG}" > outfile
首先向outfile 写消息,然后继续进行进一步处理,
它从我的 awk 脚本中附加到 outfile。
但是现在我的程序中的逻辑发生了变化,所以我必须先填充
outfile 通过附加我的 awk 程序中的行(从我的外部调用
bash 脚本),然后作为最后一步添加 ${MSG} heredoc 到
我的outfile..的负责人..
我怎样才能在我的 bash 脚本而不是 awk 脚本中做到这一点?
编辑
这是味精heredoc:
read -r -d '' MSG << EOF
-----------------------------------------------
-- results of processing - $CLIST
-- used THRESHOLD ($THRESHOLD)
-----------------------------------------------
l
EOF
# trick to pertain newline at the end of a message
# see here: http://unix.stackexchange.com/a/20042
MSG=${MSG%l}
【问题讨论】:
-
注意:带异端的猫?可移植的方法是
printf '%s\n' "$MSG" > outfile。尽可能避免使用 bashism。 -
仅供参考,您在这里所做的必然是低效的——“必然”意味着 POSIX 不提供任何方式(在 any 编程语言中)将内容添加到一个文件而不重写整个文件。如果它是一个大文件,那么,你应该尽量避免任何会让你经常这样做的过程。
-
@CharlesDuffy 是的,你是对的,在我的脚本中这只发生了一次。我尝试使用
awk处理该MSG 写作,但是,由于awk脚本在我的bash 脚本中被多次调用,将MSG 放入BEGIN 块无济于事,因为我会有很多实例,我只想要一个在顶部。 -
顺便说一句:你可以不用
l保留尾随换行符的技巧,如果你使用以下代码:IFS= read -r -d '' MSG << EOF ...。 -
@mklement0 我是否必须将其恢复为旧的
IFS值,或者没关系,因为它会随着脚本的完成而发生?
标签: bash prepend herestring