设置通用别名会导致什么都不做

设置通用别名会导致什么都不做

我想创建一个别名,可以在任何命令上定义并连接| lolcat到它。到目前为止,我在谷歌上搜索了

alias MyCommandName='f(){"$@" | lolcat; unset -f f};f'

但当我用它测试时,dmesg没有得到任何结果。

# set dmesg
alias dmesg='f(){"$@" | lolcat; unset -f f};f'
#desired command: dmesg | lolcat
dmesg

据我了解,别名定义了一个函数 f,之后会调用该函数。为了防止递归,最后一条语句是取消设置该函数。

编辑:我停在:

    alias MyCommandName='f(){eval "$@ | lolcat"; unset -f f};f' 
    alias MyCommandName='f(){eval "$0 $@ | lolcat"; unset -f f};f'

这不起作用,因为我无法将参数传递$0给我的函数。$0函数内部始终为 f。通用别名(例如)是不可能的。 :(

不是重复的,因为我正在使用 ZSH,并且根据其他 10 个答案,可以传递参数,例如:)。

答案1

如果我理解正确的话,您想要做一些事情,采用一个命令名,比如说dmesg,然后将其变成某个东西并将其输出通过管道传输到lolcat

最好使用函数来完成:

dmesg () { command "$0" "$@" | lolcat; }

这是最“通用”的。该command命令跳过函数并调用内置函数或可执行文件:命令:`command` 有什么用?. $0,正如您所意识到的,是函数的名称,这也是命令的名称。因此,command "$0"运行与函数同名的命令。

相关内容