我有一个Bash脚本,运行一个带参数的程序。该程序会输出一些状态信息(正在做这个、正在做那个...)。该程序没有任何选项可以使其保持安静。我如何防止脚本显示任何东西?
我正在寻找类似于Windows的"echo off"的东西。
我正在寻找类似于Windows的"echo off"的东西。
scriptname >/dev/null
如果你还希望错误消息也被发送到那个地方,请使用以下其中一个命令(第一个命令在某些shell中可能不起作用):
scriptname &>/dev/null
scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null
如果你想记录这些信息,但不想看到它们,请将 /dev/null
替换为一个实际的文件,比如:
scriptname &>scriptname.out
为了完备性,在Windows的cmd.exe下(其中“nul”是“/dev/null”的等效物),它是:
scriptname >nul 2>nul
类似于什么
script > /dev/null 2>&1
这将阻止标准输出和错误输出,将它们同时重定向到/dev/null
。
2>/dev/null
。 - alper在某些情况下可能适用的另一种方法是将命令的结果分配给一个变量:
$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1
由于Bash和其他POSIX命令行解释器不将变量赋值视为命令,因此会尊重当前命令的返回码。
注意:使用typeset
或declare
关键字进行赋值被视为一条命令,因此在这种情况下计算的返回码是赋值本身,而不是在子shell中执行的命令。
$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
尝试
: $(yourcommand)
:
是指“什么都不做”。
$()
只是你的命令。
0
(表示成功)。让我们举一个例子,使用命令 false
,该命令始终返回 1
(表示失败)。例如 ( echo foo | tee file ; false ) && echo bar
显示 foo
。使用您的技巧来禁止输出:( : $(echo foo | tee file ; false) ) && echo bar
。但是它显示 bar
,这意味着返回的状态码是 0
(而不是 false
的返回状态码)。请更新您的答案,提供此限制。谢谢 - oHoDUMMY=$(yourcommand)
呢?它没有你提到的限制。 :) - sementecommand | :
,这样可能更容易输入。 - nadapez如果你是在Unix环境下工作,请像andynormancx的帖子一样使用以下方法:
scriptname > /dev/null
scriptname > nul
scriptname |& :
:
会丢弃输入,所以它的作用类似于 /dev/null
,但你却不必要地创建了一个无用的管道。 - tripleee看看这个来自Linux文档项目的例子:
3.6 Sample: stderr and stdout 2 file
This will place every output of a program to a file. This is suitable sometimes for cron entries, if you want a command to pass in absolute silence.
rm -f $(find / -name core) &> /dev/null
话虽如此,您可以使用这个简单的重定向:
/path/to/command &>/dev/null
some_code 2>>/dev/null
或者你也可以尝试
some_code >>/dev/null
>&-
关闭文件描述符,甚至不会重定向到 /dev/null。
foo 2>&- >&-
也可以关闭标准输入
foo 2>&- >&- <&-
2>&1
部分,它是将标准错误输出重定向到标准输出。第一个命令只会抑制标准输出而不会抑制标准错误输出;而第二个命令会同时抑制两者。 - undefined
echo foo > $(tty)
并运行./test.sh &> /dev/null
- 输出仍将打印到终端上。当然,如果您编写的脚本未使用此类命令,则不会出现此问题。 - l0b0/dev/null
,您不需要使用nul
。 - dimo414