이것은 작동합니다:
#!/bin/zsh
### List apps ###
arch="$(paru --query --quiet --explicit --unrequired)"
repos=( $HOME/repos/./* )
npm=( $(npm list --global --parseable) )
box="${(l:20::─:)}"
print -l "${arch}" "${box}" "${repos[@]:t}" "${box}" "${npm[@]:1:t}" | column
결과:
alsa-utils foot libva-utils patch waylock
android-tools fuzzel links pdfarranger wine-gecko
anki fwupd linux-lts pinta winetricks
aria2 fzy linux-zen pkgconf wl-color-picker
auto-cpufreq github-cli lswt pkgstats wlsunset
autoconf gnu-netcat make polkit-gnome xdg-user-dirs
automake go man-db pulsemixer xorg-xeyes
base gocryptfs mdcat python-android-backup-tools zip
bison grabc meld qutebrowser zram-generator
brightnessctl greetd microsoft-edge-stable-bin ripgrep zsh-completions
calibre greetd-tuigreet moreutils river ────────────────────
cheat grive mupdf rivercarro ansiweather
cmus helix ncdu rustup bash-script-template
cups-pdf httrack neomutt speedtest-cli cheatsheets
dragon-drop imv newsboat swayidle paru
dunst intel-gpu-tools nicotine+ system-config-printer typewritten
edk2-shell intel-ucode noto-fonts-cjk tealdeer zsh-z
efibootmgr inxi noto-fonts-emoji timeshift ────────────────────
eg iwd onedrive-abraunegg tiny-irc-client vercel
fd jpegoptim pacman-contrib ufw
flex jq pandoc-bin urlview
foliate kakoune paru vscode-langservers-extracted
print -c
그러나 파이프 대신 실행할 마지막 줄을 변경하면 column
세로로 인쇄되지 않습니다.
print -c "${arch}" "${box}" "${repos[@]:t}" "${box}" "${npm[@]:1:t}"
답변1
변수 $arch
는 개행 문자가 포함된 매우 긴 문자열을 포함하는 스칼라 변수로 정의됩니다.
해당 문자열의 각 행을 별도의 인수로 전달하여 print -c
열 단위로 인쇄할 수 있으므로 $arch
각 행이 별도의 요소로 포함된 배열이 됩니다.
일부(비어 있지 않은) 출력 라인을 얻는 것은 eed 문자 라인에서 매개변수 확장 플래그를 분할하여 수행됩니다 ${(f)"$(cmd)"}
.zsh
f
f
#! /bin/zsh -
arch=( ${(f)"$(paru --query --quiet --explicit --unrequired)"} )
repos=( ~/repos/*(N:t) )
npm=( ${${(f)"$(npm list --global --parseable)"}:t} )
sep=${(l[20][─])}
print -rc -- $arch $sep $repos $sep $npm[2,-1]
목록을 별도의 열에 인쇄하려면 구분 기호를 사용할 필요가 없습니다.
paste <(print -rC1 -- $arch) \
<(print -rC1 -- $repos) \
<(print -rC1 -- $npm[2,-1]) |
expand -t 20
예:
$ paste <(seq 10) <(seq 12) <(seq 3) | expand -t20
1 1 1
2 2 2
3 3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11
12
기타 참고사항:
- 스크립트의 한정자를 참고하세요
N
. 숨겨지지 않은 파일이 없으면 스크립트가 중단되지 않습니다.~/repos
- 일반적으로 사용하고 싶지 않은 백슬래시 처리 형식을 수행 하거나 인쇄하려는 항목에서 옵션을 분리하는 대신 이를 사용할 때마다 이를 기본값으로
print
사용해야 합니다 . 후자를 수행하지 못하면 명령 주입 취약점이 발생할 수 있습니다.-r
-
--
/./
내가 아는 한, 귀하의 코드에 있는 코드는 아무 작업도 수행하지 않으며 이를 제거했습니다. 숨겨진 파일을 포함하려면D
glob 한정자를 추가해야 합니다.lib
첫 번째 항목이라고 가정하지 않고 제외 하려면 대신$npm
사용할 수 있습니다 (저는 최근에 추가되었으며 ksh93/bash와의 호환성을 위해서만 추가된 zsh를 선호합니다).${num:#lib}
$num[2,-1]
${num:1}
print -rC1 --
print -rl --
인수가 없으면 빈 줄만 인쇄하므로 한 줄에 요소가 하나씩 있는 목록을 인쇄하는 더 정식적인 방법이므로print -l
olumn에 인쇄하는 것 보다 낫습니다.1
C