(我没有足够高的声誉来评论我的问题:如何并排显示两个程序的标准输出输出)
我已经尝试过paste <(jcal) <(ccal)
,但输出很混乱。
jcal; ccal;
给出了正确的输出,只是不是并排的。
Tir 1402
Sh Ye Do Se Ch Pa Jo
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
July 2023
Su Mo Tu We Th Fr Sa
1
2 3 4< 5> 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
实际输出有颜色,jcal
日期的颜色不同
但使用 时paste <(jcal) <(ccal)
,颜色会被移除,两个输出会混合在一起。
Tir 1402
Sh Ye Do Se Ch Pa Jo July 2023
1 2 Su Mo Tu We Th Fr Sa
3 4 5 6 7 8 9 1
10 11 12 13 14 15 16 2 3 4< 5> 6 7 8
17 18 19 20 21 22 23 9 10 11 12 13 14 15
24 25 26 27 28 29 30 16 17 18 19 20 21 22
31 23 24 25 26 27 28 29
30 31
有没有更好的方式来同时显示jcal
和输出?ccal
像这样,但具有适当的颜色:
Tir 1402 July 2023
Sh Ye Do Se Ch Pa Jo Su Mo Tu We Th Fr Sa
1 2 1
3 4 5 6 7 8 9 2 3 4< 5> 6 7 8
10 11 12 13 14 15 16 9 10 11 12 13 14 15
17 18 19 20 21 22 23 16 17 18 19 20 21 22
24 25 26 27 28 29 30 23 24 25 26 27 28 29
31 30 31
答案1
看起来您只需要删除输出的第一行ccal
:
$ paste <(jcal) <(ccal|tail -n+2)
Tir 1402 July 2023
Sh Ye Do Se Ch Pa Jo Mo Tu We Th Fr Sa Su
1 2 1 2
3 4 5 6 7 8 9 3 4< 5> 6 7 8 9
10 11 12 13 14 15 16 10 11 12 13 14 15 16
17 18 19 20 21 22 23 17 18 19 20 21 22 23
24 25 26 27 28 29 30 24 25 26 27 28 29 30
31 31
看起来ccal
只有当 stdout 转到 tty 时才以颜色输出(即使使用显式--use-color
),并且也不会在每行末尾将颜色恢复为默认值(在某些终端上导致令人讨厌的伪影)。您可以使用以下方法解决这两个问题:
paste <(jcal) <(socat -u exec:ccal,pty exec:'tail -n+2') |
sed $'s/$/\e[m/'
其中socat
使用伪终端设备(pty)代替管道在ccal
和之间传输数据,并在每行末尾添加SGR0 转义序列以将图形渲染属性重置为默认值。tail
sed
<ESC>[m
答案2
好吧,它的颜色并不完全相同,但至少它是可读的,我对此很满意。
这是有效的:
paste <(ccal) <(printf '\n \t' && jcal)
输出:
July 2023 Tir 1402
Su Mo Tu We Th Fr Sa Sh Ye Do Se Ch Pa Jo
1 1 2
2 3 4< 5> 6 7 8 3 4 5 6 7 8 9
9 10 11 12 13 14 15 10 11 12 13 14 15 16
16 17 18 19 20 21 22 17 18 19 20 21 22 23
23 24 25 26 27 28 29 24 25 26 27 28 29 30
30 31 31
更新:如果你想在它们之间显示黄昏以及日出和日落,你可以使用sunwait
这个脚本(从上面 Stéphane Chazelas 的优秀解决方案中获得的知识):
paste <(jcal) <(printf '\n' && sunwait list 1 astronomical 27.96382229N 86.91248325E && sunwait list 1 nautical 27.96382229N 86.91248325E && sunwait list 1 civil 27.96382229N 86.91248325E && sunwait list 1 daylight 27.96382229N 86.91248325E && printf ' \n \t \n \t \n \t \n \t \n \t') <(printf '\t' && socat -u exec:ccal,pty exec:'tail -n+2') | sed $'s/$/\e[m/'
只需编辑 GPS 坐标即可。
它可以在控制台和图形终端中运行。
sunwait report 27.000N 73.9385723W
如果您有兴趣,将为您提供一份包括黄昏和太阳正午的报告。
Current Date and Time: 05-Jul-2023 13:33 EDT
Target Information ...
Location: 27.000000N, 286.061428E
Date: 04-Jul-2023
Timezone: EDT
Sun directly north/south: 13:00
Twilight angle: -0.83 degrees (daylight)
Day with twilight: 06:04 to 19:55
It is: Day (or twilight)
General Information (no offset) ...
Times ... Daylight: 06:04 to 19:55
with Civil twilight: 05:39 to 20:20
with Nautical twilight: 05:08 to 20:51
with Astronomical twilight: 04:34 to 21:25
Duration ... Day length: 13:50 hours
with civil twilight: 14:40 hours
with nautical twilight: 15:43 hours
with astronomical twilight: 16:50 hours
再次感谢 Stéphane Chazelas 提供了上述出色的解决方案,特别是找出了颜色部分!