我有一个程序输出到stdout,并希望在管道传输到文件时在Bash脚本中使输出静音。
例如,运行程序将输出:
% myprogram
% WELCOME TO MY PROGRAM
% Done.
我希望以下脚本不向终端输出任何内容:
#!/bin/bash
myprogram > sample.s
答案 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)