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

Sam*_*Sam 130 bash

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

例如,运行程序将输出:

% myprogram
% WELCOME TO MY PROGRAM
% Done.
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash
myprogram > sample.s
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 172

如果它输出到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
Run Code Online (Sandbox Code Playgroud)

  • "&>"行是我刚刚发布的简短版本.我之前没遇到过那条捷径.Upvoting. (12认同)
  • `&>`比bash 4大很多. (5认同)

Deb*_*ger 53

sample.s

有了这个,你将stderr(它是描述符2)重定向到文件描述符1,这是stdout

/dev/null

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

sample.s

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

/dev/null

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

  • 最后一个缺少重定向运算符; 它应该是`myprogram>/dev/null 2>&1`(注意`/ dev/null`之前的wedge和重定向的顺序). (13认同)
  • `myprogram &>/dev/null` 还不够吗? (4认同)

Edu*_*omo 34

所有输出:

scriptname &>/dev/null
Run Code Online (Sandbox Code Playgroud)

便携性:

scriptname >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

便携性:

scriptname >/dev/null 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

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

scriptname &>-
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 11

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

#!/bin/bash
myprogram >& sample.s
Run Code Online (Sandbox Code Playgroud)

然后运行就好了./script,你的终端没有输出.:)

">&"表示STDERR和STDOUT.对&管道也有同样的作用:./script |& sed 将所有内容发送到sed

  • man bash(在"重定向标准输出和标准错误"下)表示&>和>&等效,但第一个(&>)是首选.但是|&是管道的唯一方法. (7认同)
  • 你的意思是"&>"吗? (3认同)

Hen*_* H. 9

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

  • 有趣的骇客...争取聪明^ _ ^ (2认同)

小智 6

尝试:

myprogram &>/dev/null
Run Code Online (Sandbox Code Playgroud)

没有输出