修复或寻找不良“paste

修复或寻找不良“paste

(我没有足够高的声誉来评论我的问题:如何并排显示两个程序的标准输出输出

我已经尝试过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 转义序列以将图形渲染属性重置为默认值。tailsed<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 提供了上述出色的解决方案,特别是找出了颜色部分!

相关内容