잘못된 "paste <(jcal) <(ccal)" 출력에 대한 대안을 수정하거나 찾으세요.

잘못된

(私の質問についてコメントするほど評判は高くありません。両方のプログラムのstdout出力を並べて表示する方法)

これを試しましたが、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

ccalstdoutがttyに行くときだけ色で出力されるように見えます(explicitを使用しても--use-color)、各行の終わりに色をデフォルト値に戻すことはありません(一部の端末で迷惑なアーティファクトが発生します)。次の方法を使用して両方の問題を解決できます。

paste <(jcal) <(socat -u exec:ccal,pty exec:'tail -n+2') |
  sed $'s/$/\e[m/'

socatパイプの代わりに擬似ターミナルデバイス(pty)を使用してccalデータを転送し、各行の最後にSGR0エスケープシーケンスを追加して、グラフィックレンダリングプロパティをデフォルト値にリセットします。tailsed<ESC>[m

上記のスクリーンショット

おすすめ記事