linux CLI 下发送邮件换行符问题。

2015-12-15 21:47:26 +08:00
 1yndonn3u

df -lh 结果如下

➜ ~ df -lh
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1 112Gi 42Gi 70Gi 38% 10947483 18375779 37% /

我想把以上内容通过 CLI 界面的邮箱直接发送除去,但是发出去的结果就变成了一行显示了,不能保持现在的格式化输出。
哪位朋友有办法么?最好使用 mail -s

对了,我还要对里面的数据进行排序和处理,磁盘空间大于 50%的时候标记为红颜色。

3439 次点击
所在节点    Linux
6 条回复
billlee
2015-12-15 22:06:42 +08:00
sed 's/$/\r/' 吗?
bdbai
2015-12-15 22:32:48 +08:00
上 HTML 。
Orzzzz
2015-12-15 22:59:56 +08:00
df -h > df.txt

发送附件。
uuspider
2015-12-15 23:09:59 +08:00
<< EOF
应该是可以的
Arthur2e5
2015-12-18 11:43:54 +08:00
纯文本邮件一般单独一个换行没有特殊的意义,只有相当于 wrap line 的意思,而有些电子邮件客户端就喜欢把这些东西吃掉,只考虑连续两个换行符为新自然段的意思(这当然很蠢——发个充满诚意的制表符画出来的表格直接 GG )。收发的时候应该还是原样的,不过的确也听说过逗逼服务商强行吃掉重排的情况。

HTML 是个好主意,毕竟敢吃 <pre> 的逗逼更少一点。附件的话一般服务商更不敢乱改了。考虑到想要加奇怪的高亮功能,我们用 HTML 吧:

# 自己爱怎么缩进怎么来。。
shopt -e
generate(){
set -f
local out i tok && readarray -t out < <(df -lh) || return;
printf '<pre>\n'
for i in "${out[@]}"; do
for tok in $i; do
if [[ $i == +([0-9])% && ${i%\%} < 50 ]]; then
printf '<font color=red>%s</font>\t' "$i"
else
printf '%s\t' "$i"
fi
done
printf '\n'
done
set +f
}

懒得写查找替换实体了……自己小心点……另外这会打乱列的排列我懒得重新统计 format 先用 tab 糊上吧……
Arthur2e5
2015-12-18 11:44:48 +08:00
@Arthur2e5 我个傻子。。 for tok in $i 直到第一个 done 里面所有的 $i 换成 $tok, ${i 换成 ${tok 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/243796

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX