是否有">/dev/null 2>&1"的命令行快捷方式

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重定向stdoutstderr/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手册更喜欢"&>/dev/null"形式,以避免">&n"(其中n是整数)可能存在歧义.不过,我不认为它在Bash之外是可移植的. (8认同)
  • 我真的很想知道你正在运行什么迫使你把stdout和stderr管道到/ dev/null这么频繁地输入/ dev/null会变成烦恼. (3认同)

Zaz*_*Zaz 9

bash,zshdash中:

$ program >&- 2>&-
Run Code Online (Sandbox Code Playgroud)

似乎也适用于其他shell,因为它&-是一个错误的文件描述符.

请注意,此解决方案会关闭文件描述符,而不是将其重定向到/dev/null,这可能会导致程序中止.


swa*_*ohn 6

大多数shell支持别名.例如,在我的.zshrc中,我有类似的东西:

alias -g no='2> /dev/null > /dev/null' 
Run Code Online (Sandbox Code Playgroud)

然后我就输入

program no
Run Code Online (Sandbox Code Playgroud)

  • 在bash中,那将是:alias no ='2>/dev/null>/dev/null'; 没有命令arg arg (3认同)