命令扩展的终端部分?

命令扩展的终端部分?

我经常想要某种命令的“位”的别名/替换。

例如:我希望将“bkg”转换为“2> /dev/null > /dev/null &”,以便我可以在后台运行应用程序,而不会让它们的输出像这样垃圾到控制台:

nautilus . bgk
>>>
nautilus . 2> /dev/null > /dev/null &

到目前为止我最接近的工作如下:

1)创建别名:

alias bkg="&> /dev/null > /dev/null &"

2)在输入命令之前,先输入别名和第一个通过 ctrl+alt+e 展开,然后返回并输入命令。

bkg       #press ctrl+alt+e
&> /dev/null > /dev/null &    #has expanded. Now go back and type cmd:
nautilus &> /dev/null > /dev/null &

但这确实有些麻烦。

[编辑] ZSH 似乎有全局别名。这接近我需要的。但从阅读来看,zsh 似乎与 bash 脚本不完全兼容。似乎切换到 zsh 只是为了全局别名,但破坏了 bash 脚本可能不值得付出努力。因此,寻找 bash 原生解决方案。

[编辑]
根据@egmont 的建议,接近我需要的是定义一个别名:

alias quiet="&> /dev/null "

然后我可以像这样使用它:

quiet nautilus . &

但是,有两个问题:“&”必须位于末尾,并且输入“quiet”后制表符预测不起作用。

答案1

ZSH 将通过全局别名(以及&>/dev/null编写重定向的更简便方法)为您提供所需的所有帮助。

% alias -g bgk='&>/dev/null &'
% sleep 20 bgk
[1] 44612
% 

但是,我强烈建议不要使用全局别名,因为它们有点儿像枪械。

答案2

shell 的一个鲜为人知的功能是重定向不需要位于行尾,它可以位于参数之间的任何位置,甚至可以位于最开始的位置。换句话说,这三个是等效的:

nautilus . >/dev/null
nautilus >/dev/null .
>/dev/null nautilus .

因此,您可以alias blk='>/dev/null'在命令行开头定义哪个将在工作,或者定义alias naublk='nautlius >/dev/null'然后执行naublk .,等等。

有趣的是,bash-4.3你似乎可以在开头为重定向指定多个别名,然后为命令指定一个别名。例如:

alias dn1='> /dev/null'
alias dn2='2> /dev/null'
alias nau=nautilus
dn1 dn2 nau .

相关内容