【发布时间】:2019-05-03 08:56:19
【问题描述】:
假设我有一个标准的 80 列终端,执行带有长行输出的命令(即来自ls 的标准输出),该命令分为两行或多行,并且想要缩进我所有 bash 标准输出的续行。
缩进应该是可配置的,1 或 2 或 3 或任何空格。
从这里
lrwxrwxrwx 1 root root 24 Feb 19 1970 sdcard -> /storage/emulated/legacy/
到这里
lrwxrwxrwx 1 root root 24 Feb 19 1970 sdcard -> /storage/emulated/legacy/
阅读此Indenting multi-line output in a shell script,因此我尝试通过管道传递| sed 's/^/ /',但给了我完全相反的结果,缩进第一行而不是续行。
理想情况下,每次打开交互式 shell 并执行任何命令时,我都会将脚本放在 profile.rc 中或其他任何地方,长输出会缩进。
【问题讨论】:
-
awk似乎是最简单的方法 - 考虑添加该标签。您可以使用tput cols获取终端的宽度并使用awk脚本(如awk w=$(tput cols) 'length($0)>w{print substr($0,1,w);print "____",substr($0,w+1);next}1')进行过滤,然后将其放入bash函数中以方便使用。 -
只需将输出通过管道传输到
column -t。
标签: bash awk sed stdout interactive