让我们做一个简单的例子。这是终端在屏幕上打印的标准输出。
Mac:~ usr$ brew list
gdbm libidn2 node python@2 wget
gettext libunistring openssl readline xz
icu4c lz4 python sqlite
但是,当我将标准输出重定向到文件时,列样式会丢失。
Mac:~ usr$ brew list | tee "$(date '+%Y-%m-%d-%H%M%S').log"
gdbm
gettext
icu4c
libidn2
libunistring
lz4
node
openssl
python
python@2
readline
sqlite
wget
xz
如何在输出文件中保留与终端屏幕上显示的完全相同的标准输出样式,以使日志文件看起来很漂亮?
日志文件不会进一步传递到任何其他程序,函数或循环中进行分析,因为在每行中输出每个元素都是有利的。
该日志文件仅供个人参考,因此我希望将其保留为易于阅读的格式,例如IETF的72个字符的宽度。寻求这种方式的另一个目的是,当我将文件实际打印在一张纸上时,它会占用较少的垂直空间,也许我也可以在其他场合应用这种方式。
假定终端具有默认的macOS窗口大小: 80列x 24行。
根据this discussion的建议,我可以使用script
script -q /dev/null brew list | perl -pe 's/\r\n/\n/g' > "$(date '+%Y-%m-%d-%H%M%S').log"
将保留输出样式,但使用emacs或vim打开日志文件。如果我使用BBEdit打开日志文件,则将以可视方式调整选项卡的宽度---这导致我错误地认为该命令无效。