Isso funciona:
#!/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
Resultados:
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
Mas mudar a última linha para executar print -c
em vez de canalizar column
não funciona; imprime verticalmente:
print -c "${arch}" "${box}" "${repos[@]:t}" "${box}" "${npm[@]:1:t}"
Sua
$arch
variável é definida como uma variável escalar que contém uma string muito longa com caracteres de nova linha.Você deseja que cada linha nessa string seja passada como argumentos separados para
print -c
poder imprimi-los em colunas, para$arch
ser uma matriz com cada linha como um elemento separado.Obter as linhas (não vazias) de alguma saída é
${(f)"$(cmd)"}
ondezsh
of
sinalizador de expansão de parâmetro se divide emf
caracteres de linha:Se você quiser imprimir as listas cada uma em sua própria coluna, eliminando a necessidade de um separador:
Exemplo:
Outras notas:
N
qualificador para o script não abortar se não houver nenhum arquivo não oculto em~/repos
print
, você deve usar a-r
opção como padrão sem fazer alguma forma de processamento de barra invertida que você geralmente não deseja e usar-
ou--
para separar opções de coisas para imprimir. Não fazer o último pode introduzir vulnerabilidades de injeção de comando././
em seu código não serve para nada, tanto quanto posso ver, e eu o removi. Se você quiser incluir arquivos ocultos, adicione oD
qualificador glob.lib
de$npm
sem ter que assumir que é o primeiro, você usaria${num:#lib}
em vez de$num[2,-1]
(o que eu prefiro muito mais ao${num:1}
qual zsh adicionado recentemente e apenas para compatibilidade com ksh93/bash).print -rC1 --
é melhor do queprint -rl --
(e a fortiori do queprint -l
) imprimir em1
C
olumn, pois não imprime nada em vez de uma linha vazia quando não é fornecido nenhum argumento, portanto, é uma maneira mais canônica de imprimir uma lista, um elemento por linha.