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

관련 정보