stdoutがパイプで接続されていても、flatpak出力をテーブルに強制的に表示するにはどうすればよいですか?

stdoutがパイプで接続されていても、flatpak出力をテーブルに強制的に表示するにはどうすればよいですか?

flatpak出力をテーブルとして印刷します。

$ flatpak search firefox
Name       Description                                        Application ID         Version     Branch Remotes
Firefox    Fast, Private & Safe Web Browser                   org.mozilla.firefox    116.0.2     stable flathub
Mullvad B… Free the internet from mass surveillance           …ullvad.MullvadBrowser 12.5.2      stable flathub
Mojave-GTK Mojave-Style Theme for GTK Flatpak Applications    …tk3theme.Mojave-light 0.1         3.22   flathub

catただし、または同じ項目にパイプされると、grep出力はもはや表形式ではなく、表ヘッダーは消えます。

$ flatpak search firefox | cat
Firefox Fast, Private & Safe Web Browser    org.mozilla.firefox 116.0.2 stable  flathub
Mullvad Browser Free the internet from mass surveillance    net.mullvad.MullvadBrowser  12.5.2  stableflathub
Mojave-GTK  Mojave-Style Theme for GTK Flatpak Applications org.gtk.Gtk3theme.Mojave-light  0.1 3.22    flathub

出力が別のプロセスにパイプされている場合でも、flatpakに出力をテーブルとしてフォーマットさせるにはどうすればよいですか?

答え1

システムコールの内容を調べると、flatpak searchflatpakコマンドが実際の端末の標準出力を確認し、出力をレイアウトするための幅(文字単位)を取得することがわかります。 (これをテストできます。小さなコンソールウィンドウを作成して同じコマンドを実行します。)flatpak searchもう一度コマンドを実行します。まったく同じ出力が含​​まれていません! )。

ファイルにリダイレクトするには「表示可能な列数」がないため、Flatpakはディスプレイと同じ良いレイアウトを実行しようとしません。

こんにちはFlim、そうですね。たくさんたとえば、生成された「人のようにきれいな」出力を使用しないように、flatpak search基本プログラムを直接呼び出す必要があります。しかし:

flatpakTabデフォルトでは、タブ文字(、、、、必要な名前)を使用して出力から列を区切るため、\t個々の列を簡単に区切って必要な方法で直接レイアウトできます。たとえば、

COLUMNS=application,version,name
flatpak search --columns "${COLUMNS}" gimp | mlr --itsv --opprint --barred --implicit-csv-header label "${COLUMNS}"

生産する

+------------------------------------+---------+--------------------------------+
| application                        | version | name                           |
+------------------------------------+---------+--------------------------------+
| org.gimp.GIMP.Manual               | 2.10    | GIMP User Manual               |
| org.gimp.GIMP                      | 2.10.34 | GNU Image Manipulation Program |
| org.gimp.GIMP.Plugin.Resynthesizer | 2.0.3   | Resynthesizer                  |
| org.gimp.GIMP.Plugin.Resynthesizer | 2.0.3   | Resynthesizer                  |
| org.gimp.GIMP.Plugin.Lensfun       | 0.2.4   | GimpLensfun                    |
| org.gimp.GIMP.Plugin.Lensfun       | 0.2.4   | GimpLensfun                    |
| org.gimp.GIMP.Plugin.Fourier       | 0.4.3   | Fourier                        |
| org.gimp.GIMP.Plugin.Fourier       | 0.4.3   | Fourier                        |
| org.gimp.GIMP.Plugin.BIMP          | 2.6     | BIMP                           |
| org.gimp.GIMP.Plugin.BIMP          | 2.5     | BIMP                           |
| org.gimp.GIMP.Plugin.LiquidRescale | 0.7.2   | LiquidRescale                  |
| org.gimp.GIMP.Plugin.LiquidRescale | 0.7.2   | LiquidRescale                  |
| org.gimp.GIMP.Plugin.GMic          | 3.2.6   | G'MIC                          |
| org.gimp.GIMP.Plugin.GMic          | 2.9.6   | G'MIC                          |
| org.gimp.GIMP.Plugin.FocusBlur     | 3.2.6   | FocusBlur                      |
| org.gimp.GIMP.Plugin.FocusBlur     | 3.2.6   | FocusBlur                      |
| org.gabmus.swatch                  | 0.1     | Swatch                         |
| com.github.unrud.djpdf             | 0.4.3   | Scans to PDF                   |
+------------------------------------+---------+--------------------------------+



¹私がした方法:

strace -o /tmp/flatpak.strace flatpak search/tmp/platpak.straceをすばやく読んでください。

grep ioctl /tmp/strace

私たちに与える

ioctl(1, TIOCGWINSZ, {ws_row=61, ws_col=232, ws_xpixel=2552, ws_ypixel=1403}) = 0
ioctl(1, TCGETS, {c_iflag=ICRNL|IXON|IUTF8, c_oflag=NL0|CR0|TAB0|BS0|VT0|FF0|OPOST|ONLCR, c_cflag=B38400|CS8|CREAD, c_lflag=ISIG|ICANON|ECHO|ECHOE|ECHOK|IEXTEN|ECHOCTL|ECHOKE, ...}) = 0

関連情報