【问题标题】:Why does my command stop working when I put it into an alias?为什么当我将它放入别名时我的命令停止工作?
【发布时间】:2022-01-17 07:05:06
【问题描述】:

我正在尝试运行以下命令 comm -23 <(pacman -Qqe | sort) <(awk '{print $1}' /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 $1}' /desktopfs-pkgs.txt | sort)"

采购后,输出如下。

~: 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,好像它实际上并没有正确地进行文件比较。

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

【问题讨论】:

    标签: zsh alias zshrc pacman comm


    【解决方案1】:

    $1 在定义别名时被 shell 替换,即 awk 永远不会看到 $1。您可以通过显示您的别名来验证这一点

    alias paccom
    

    您必须将别名 $ 中的 转义以防止替换,或者更好的是(为您省去更多麻烦)定义一个函数而不是别名。

    【讨论】:

    • 啊,有道理。谢谢!我将继续定义一个函数。
    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 2018-01-30
    • 2017-04-09
    • 2018-12-16
    • 2023-03-31
    相关资源
    最近更新 更多