21 bash shell redirect command pipe
每当我不想看到程序的输出时,输入它真的很烦人.我想知道是否有更短的写作方式:
$ program >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
通用shell是最好的,但其他shell也很有趣,特别是bash或dash.
Aym*_*ieh 15
你可以为此编写一个函数:
function nullify() {
"$@" >/dev/null 2>&1
}
Run Code Online (Sandbox Code Playgroud)
要使用此功能:
nullify program arg1 arg2 ...
Run Code Online (Sandbox Code Playgroud)
当然,您可以根据需要为该功能命名.例如,它可以是单个字符.
顺便说一句,你可以使用exec重定向stdout和stderr对/dev/null暂时的.我不知道这对你的情况是否有帮助,但我想分享它.
# Save stdout, stderr to file descriptors 6, 7 respectively.
exec 6>&1 7>&2
# Redirect stdout, stderr to /dev/null
exec 1>/dev/null 2>/dev/null
# Run program.
program arg1 arg2 ...
# Restore stdout, stderr.
exec 1>&6 2>&7
Run Code Online (Sandbox Code Playgroud)
and*_*otn 14
>& /dev/null
Run Code Online (Sandbox Code Playgroud)
在bash,zsh和dash中:
$ program >&- 2>&-
Run Code Online (Sandbox Code Playgroud)
它似乎也适用于其他shell,因为它&-是一个错误的文件描述符.
请注意,此解决方案会关闭文件描述符,而不是将其重定向到/dev/null,这可能会导致程序中止.
大多数shell支持别名.例如,在我的.zshrc中,我有类似的东西:
alias -g no='2> /dev/null > /dev/null'
Run Code Online (Sandbox Code Playgroud)
然后我就输入
program no
Run Code Online (Sandbox Code Playgroud)