当我将命令放入别名时,为什么我的命令停止工作?

Why does my command stop working when I put it into an alias?

我正在尝试 运行 以下命令 comm -23 <(pacman -Qqe | sort) <(awk '{print }' /desktopfs-pkgs.txt | sort)

我得到以下输出

autoconf
automake
bison
chromium
code
discord
fakeroot
flex
lib32-mesa-vdpau
lib32-vulkan-intel
lib32-vulkan-radeon
m4
make
mesa-vdpau
nerd-fonts-complete
paru
patch
pkgconf
spotify
terminator
vim
vulkan-intel
vulkan-radeon
xf86-video-amdgpu
xf86-video-ati
xf86-video-intel
xf86-video-nouveau

我的目标是让它向我输出我明确安装的软件包与 Manjaro 附带的软件包之间的区别。

它正确地给出了我想要的输出并且工作正常,但是当我将它放入我的 zshrc 中的别名时,它失败了。

在我的 zshrc 中它看起来如下 alias paccom="comm -23 <(pacman -Qqe | sort) <(awk '{print }' /desktopfs-pkgs.txt | sort)"

sourcing后输出如下

~: paccom                                                                                                                                                                                                                   ✔   
acpi
acpid
adobe-source-han-sans-cn-fonts
adobe-source-han-sans-jp-fonts
adobe-source-han-sans-kr-fonts
adobe-source-sans-fonts
alsa-firmware
alsa-utils
amd-ucode
android-tools
android-udev
ark
autoconf
automake
avahi
b43-fwcutter
bison
...

基本上,它似乎是整个 pacman -Qqe,好像它实际上没有正确地进行文件比较。

关于行为改变的原因有什么想法吗?

在定义别名时,$1 被 shell 替代,即 awk 永远不会看到 </code>。您可以通过 </p> 显示您的别名来验证这一点 <pre><code>alias paccom

您必须在别名 $ 中转义以防止替换,或者更好的是(为了避免您进一步头痛)定义一个函数而不是别名。