如何在Bash脚本中静音输出?

时间:2010-02-18 22:53:31

标签: bash

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

例如,运行程序将输出:

% myprogram
% WELCOME TO MY PROGRAM
% Done.

我希望以下脚本不向终端输出任何内容:

#!/bin/bash
myprogram > sample.s

9 个答案:

答案 0 :(得分:165)

如果它输出到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

答案 1 :(得分:49)

2>&1

这样你就可以将stderr(它是描述符2)重定向到文件描述符1,这是stdout

myprogram > sample.s

现在执行此操作时,您将stdout重定向到文件sample.s

myprogram > sample.s 2>&1

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

myprogram 2>&1 >/dev/null

如果你想完全沉默你的应用程序

答案 2 :(得分:32)

所有输出:

scriptname &>/dev/null

便携式:

scriptname >/dev/null 2>&1

便携式:

scriptname >/dev/null 2>/dev/null

对于较新的bash(无便携版):

scriptname &>-

答案 3 :(得分:10)

如果你想要STDOUT和STDERR都是[所有],那么最简单的方法是:

#!/bin/bash
myprogram >& sample.s

然后像./script一样运行它,你的终端就不会输出。 :)

“>&”意味着STDERR和STDOUT。 &对管道也有同样的作用:./script |& sed 将所有内容发送到sed

答案 4 :(得分:9)

如果您仍在努力寻找答案,特别是如果您为输出生成了一个文件,并且您更喜欢明确的选择: echo "hi" | grep "use this hack to hide the oputut :) "

答案 5 :(得分:4)

尝试:

myprogram &>/dev/null

没有输出

答案 6 :(得分:0)

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

要真正关闭回声,命令是:

  

stty -echo

(例如,这是;当您想输入密码而又不想让密码可读时。请记住在脚本末尾打开回显,否则运行脚本的人员将不会查看他/她从那以后输入的内容。要在运行时打开echo:

  

stty回声

答案 7 :(得分:0)

在脚本中有用:


仅在文件中获取STDERR,同时隐藏任何STDOUT ,即使根本不存在要隐藏的程序(从未挂过父脚本),仅此一项是有效的:

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

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

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

答案 8 :(得分:0)

对于输出仅在发生错误时

so [命令]

Logo