我想创建一个别名,可以在任何命令上定义并连接| 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。通用别名(例如)是不可能的。 :(
答案1
如果我理解正确的话,您想要做一些事情,采用一个命令名,比如说dmesg
,然后将其变成某个东西并将其输出通过管道传输到lolcat
。
最好使用函数来完成:
dmesg () { command "$0" "$@" | lolcat; }
这是最“通用”的。该command
命令跳过函数并调用内置函数或可执行文件:命令:`command` 有什么用?. $0
,正如您所意识到的,是函数的名称,这也是命令的名称。因此,command "$0"
运行与函数同名的命令。