如何在bash中模拟zsh中的全局别名?

3
zsh 中,您可以定义全局别名。例如,
alias -g G='| grep'
alias -g W='| wc -l'

然后像这样使用它们:

some_command G some_text W

在bash中是否可以以某种方式模拟全局别名?

我相信如果你想要在整个系统中使用别名,你必须编辑你的~/.bashrc文件。这里有一个关于如何在Ubuntu上完成它的问题,也许你可以将答案调整到你的系统上。 - Aserre
@Ploutox 1) 这里的“global”意味着“整个命令行”,而不仅仅是作为第一个单词。2)由于~/.bashrc位于用户的主目录中,因此不是系统范围设置的位置。 - Adaephon
@Adaephon 对于您的第二点,可以使用 /etc/bash.bashrc 来应用系统范围内的设置。我一开始应该就写这个路径的 :) - Aserre
你可能可以设置一个readline宏来自动展开你正在输入的G| grep,但这显然会阻止你输入任何其他目的的G。当你得到一个足够独特以防止不必要扩展的宏名称时,最好直接输入| grep - chepner
2个回答

7
假设您从不想将大写字母 G 用于其他任何目的,您可以将以下内容添加到您的 .bashrc 文件中:
bind '"G": "| grep"'

当您键入| grep时,它将立即扩展为G | grep。也就是说,按Shift+g不再产生大写字母G,而是生成字符串| grep。您需要选择一个更长的序列,以免意外输入,无论是作为单独的单词还是其他单词的一部分。


8
多好的主意!使用 grep 命令。 - kojiro
LOL。我花了一些时间才理解@kojiro的回复。但一旦我明白了,就笑翻了。 - Leo Ufimtsev
只用了62个月,就有人(显然)忽略了我的警告并进行了负投票 :) - chepner

1
你可以将它保存到一个变量中。
g='| grep'

然后,你的命令可以是:
eval some_command $G some_text

或者

some_command $G some_text Ctrl+Alt+E(在其他系统上,它似乎是ctrl+x+*并且可以配置)

这将扩展命令到所需的some_command | grep some_text,因此您可以按Enter键。不应扩展的变量必须用单引号括起来。

虽然没有zsh好用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接