如何使Bash脚本中的输出静音?

如何使Bash脚本中的输出静音?,bash,Bash,我有一个输出到stdout的程序,并且希望在传输到文件时在Bash脚本中使该输出静音 例如,运行程序将输出: % myprogram % WELCOME TO MY PROGRAM % Done. scriptname &>/dev/null 我希望以下脚本不向终端输出任何内容: #!/bin/bash myprogram > sample.s 如果它也输出到stderr,您将希望使其静音。您可以通过重定向文件描述符2来执行此操作: # Send stdout to o

我有一个输出到stdout的程序,并且希望在传输到文件时在Bash脚本中使该输出静音

例如,运行程序将输出:

% myprogram
% WELCOME TO MY PROGRAM
% Done.
scriptname &>/dev/null
我希望以下脚本不向终端输出任何内容:

#!/bin/bash
myprogram > sample.s

如果它也输出到stderr,您将希望使其静音。您可以通过重定向文件描述符2来执行此操作:

# Send stdout to out.log, stderr to err.log
myprogram > out.log 2> err.log

# Send both stdout and stderr to out.log
myprogram &> out.log      # New bash syntax
myprogram > out.log 2>&1  # Older sh syntax

# Log output, hide errors.
myprogram > out.log 2> /dev/null
将stderr重定向到stdout 这将把stderr(描述符2)重定向到作为stdout的文件描述符1

2>&1
将标准输出重定向到文件 现在执行此操作时,您将标准输出重定向到文件
sample.s

myprogram>sample.s
将stderr和stdout重定向到文件 组合这两个命令将导致将stderr和stdout重定向到sample.s

myprogram>sample.s2>&1
将stderr和stdout重定向到/dev/null 如果要使应用程序完全静音,请重定向到
/dev/null

myprogram>/dev/null 2>&1

如果您希望STDOUT和STDERR都是[everything],那么最简单的方法是:

#!/bin/bash
myprogram >& sample.s
然后像
/script
那样运行它,您的终端将不会得到任何输出。:)

“>&”表示标准差和标准差。
&
也以同样的方式处理管道:
/script|&sed
将所有内容发送到sed的所有输出:

% myprogram
% WELCOME TO MY PROGRAM
% Done.
scriptname &>/dev/null
便携式:

scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null
便携式:

scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null
对于较新的bash(无可移植):

尝试:

myprogram &>/dev/null

如果您仍在努力寻找答案,特别是如果您为输出生成了一个文件,并且您更喜欢一个清晰的替代方案,则无法获得任何输出


echo“嗨”| grep“使用此技巧隐藏作品:)”

注意:此答案与问题“如何在执行shell脚本Linux时关闭echo”有关,该问题被标记为与此脚本重复

要实际关闭回声,命令如下:

stty-echo

(例如,当您希望输入密码但不希望其可读时。请记住在脚本末尾打开echo,否则运行脚本的人从此将看不到他/她键入的内容。要打开echo,请执行以下操作:

短回声

在脚本中很有用:


仅获取文件中的STDERR,同时隐藏任何STDOUT,即使要隐藏的程序根本不存在(从不挂起父脚本),这一点本身就起作用了:

stty -echo && ./programMightNotExist 2> errors.log && stty echo

完全分离并使所有内容静音,即使杀死父脚本也不会中止
/prog

 ./prog </dev/null >/dev/null 2>&1 &
/prog/dev/null 2>&1&

仅在出现错误时输出

[命令]


据我回忆,将输出重定向到文件会导致其无法回显到终端。什么对您不起作用?可能是“&>的重复行是我刚刚发布的内容的较短版本。我以前没有遇到过这种快捷方式。Upvoting。
&
比bash 4早得多。@IgnacioVazquez Abrams你能不能将记录
&
简介的变更日志链接起来?:o表示
&
是在4.0中引入的。没有提到
&
,但是更改只能追溯到2.0版本,因此我认为这意味着它已经出现在1.x版本中。
git bull
on
redir.c
指向了1998年的提交,这是当前代码库中最早的一次提交。man bash(在“重定向标准输出和标准错误”下)说&>和>&是等效的,但第一次(&>)是首选。但是,&&是管道执行此操作的唯一方法。@John否,管道的可移植方式是
a2>&1 | b2>&1 | c
这不起作用。它实际上创建了一个名为
-
的文件,
&>
是一个不可移植的bourne shell扩展。可移植的等效
echo moo 1>&
会产生一个错误,因为文件描述riptor 1已关闭:
-bash:echo:write error:Bad file descriptor
最后一个缺少重定向操作符;它应该是
myprogram>/dev/null 2>&1
(请注意
/dev/null
之前的楔块和重定向顺序).难道
myprogram&>/dev/null
不够吗?有趣的黑客……为聪明而投票^_^