<分区>
Possible Duplicate:
Capturing multiple line output to a bash variable
我有一个可能是基本脚本问题,但我无法在我看过的任何地方找到答案。
我有一个处理文件的 awk 脚本,并输出禁用系统的列表。当我从命令行手动调用它时,我得到格式化的输出:
$awk -f awkscript datafile
The following notifications are currently disabled:
host: bar
host: foo
我正在编写一个包装器脚本以从我的 crontab 调用,它将运行 awk 脚本,确定是否有任何输出,如果有则给我发电子邮件。它看起来像(简化):
BODY=`awk -f awkscript datafile`
if [ -n "$BODY" ]
then
echo $BODY | mailx -s "Disabled notifications" me@mail.address
else
echo "Nothing is disabled"
fi
当以这种方式运行时,并通过在脚本中添加 echo $BODY
进行确认,输出的格式被去除(换行符主要是我关心的),所以我得到了输出看起来像:
The following notitifications are currently disabled: host: bar host: foo
我正在尝试弄清楚如果我手动运行命令,如何保留存在的格式。
到目前为止我尝试过的事情:
echo -e `cat datafile | awkscript` > /tmp/tmpfile
echo -e /tmp/tmpfile
我尝试这样做是因为在我的系统 (Solaris 5.10) 上,使用不带 -e 的 echo 会忽略像\n 这样的标准转义序列。没用。我检查了 tmp 文件,它没有任何格式,所以问题发生在存储输出时,而不是打印出来时。
BODY="$(awk -f awkscript datafile)"
echo -e "$BODY"
我试过这个,因为我能找到的所有东西,包括 stackoverflow 上的其他一些问题,都说问题是如果没有引用,shell 会将空白代码替换为空格。没用。
我尝试过使用 printf 代替 echo,使用 $(command) 代替 `command`,并使用临时文件代替变量来存储输出,但似乎没有任何东西可以保留格式。
我错过了什么,或者是否有另一种方法可以避免这个问题?