gpt4 book ai didi

bash - Shell 脚本,将命令输出存储在变量中并保留格式

转载 作者:行者123 更新时间:2023-11-29 08:59:24 25 4
gpt4 key购买 nike

<分区>

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`,并使用临时文件代替变量来存储输出,但似乎没有任何东西可以保留格式。

我错过了什么,或者是否有另一种方法可以避免这个问题?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com