这样做是可行的:
#!/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}"发布于 2022-11-20 09:33:46
您的$arch变量被定义为一个标量变量,其中包含一个包含换行符的非常长的字符串。
您希望将该字符串中的每一行作为单独的参数传递给print -c,以便它能够在列中打印它们,因此$arch是一个数组,每一行都作为单独的元素。
获得某些输出的(非空)行的${(f)"$(cmd)"}在zsh中使用,其中f参数展开标志在feed字符上拆分:
#! /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中排除,而不必假设它是第一个,您可以使用${num:#lib}而不是$num[2,-1] (我更喜欢使用D29而不是最近添加的zsh,并且只为了与zsh 93/bash兼容)。print -rC1 --比print -rl -- (甚至比print -l)更适合在1 Column上打印,因为在没有给定参数的情况下,它只打印空行,这是打印列表(每行一个元素)的一种更规范的方法。https://unix.stackexchange.com/questions/725611
复制相似问题