我想向bash
社区检查是否有可能在命令输出的每一行之前打印动态时间戳记,甚至命令本身也需要一些时间来打印整个结果。这是示例:
在此,为便于说明,假设(echo hi; sleep 10; echo hello)
作为单个CLI命令。它将在约10秒内打印整个结果(这可能会有所不同),其中包括多行输出,请注意下面的输出。当该行打印到屏幕上时,每行都有确切的时间戳。
(echo hi ;sleep 10 ;echo hello) |perl -nle 'print scalar(localtime), " ", $_'
Mon Oct 15 13:15:57 2018 hi
Mon Oct 15 13:16:07 2018 hello
查询:
所以,我的问题是:是否有可能以某种方式操纵bashrc
或任何其他配置,而这将成为默认行为,而无需在每个命令上手动使用pipe
和perl命令?
答案 0 :(得分:1)
为简单起见,我将您的perl
命令替换为ts
。
以下技巧不是完整的解决方案,但是您可能还是有兴趣。
手动启动bash | ts
,在新外壳中,所有命令输出都将带有时间戳。此类交互式会话的示例:
$ echo test
test
$ bash | ts
$ echo test
Oct 16 13:40:16 test
$ for i in a b c; do echo "$i"; sleep 1; done
Oct 16 13:41:38 a
Oct 16 13:41:39 b
Oct 16 13:41:40 c
$ exit
Oct 16 13:41:51
$ echo test
test
但是,在nano
内时,像bash | ts
这样的文本界面似乎不再起作用。同样,用printf '\033c'
清除滚动缓冲区也行不通了。
以下命令将从您的bash | ts
内部开始.bashrc
。将其粘贴到.bashrc
的最后。由于上述问题,我不推荐使用它。
bashParents="$(ps | grep -Fwc bash)"
(( bashParents-- )) # because of subshell $(...)
if (( bashParents <= 1 )); then
bash | ts
fi