如何在shell脚本中抑制命令输出?

4

例如:

cat a.txt
1 2
1 6    

{ cat $HOME/SANITY/file.txt | grep 1 >> $HOME/SANITY/new.txt } > /dev/null

cut -d' ' -f2

现在我不希望使用这段代码运行脚本时显示结果。

1
你不想要哪个命令的结果?你可以将任何命令的stderr或stdout重定向到/dev/null来摆脱它。 - JNevill
1
使用awk代替这个grep/cut的组合。 - chepner
1
cat 的输出流到 grepgrep 的输出流到 new.txt。你看到的结果是直接显示在终端上的吗? - chepner
@chepner - 我在屏幕上看到了与new.txt中写的相同的输出。 - user4501715
2
一个展示具体输出到屏幕上的 [mcve] 将会很有帮助。你没有展示出第二行代码(带有 > /dev/null)产生的任何输出,所以问题并不明确。 - Charles Duffy
显示剩余3条评论
2个回答

8

您可以重定向输出。如果只使用your_command > /dev/null,那么只会重定向stdout。如果您想要移除stderr的输出,可以将stderr重定向到stdout,并将stdout重定向到/dev/null,使用以下命令:

your_command > /dev/null 2>&1

2>&1 会将 stderr 移动到 stdout 的文件描述符。


“Command” 是 shell 实际内置命令的名称——并不理想作为占位符名称。 - Charles Duffy

0
只需在您的情况下使用以下代码:

grep 1 "$HOME/SANITY/file.txt" >> "$HOME/SANITY/new.txt"

而对于一般目的:

command_foo_bar > /dev/null # or any other non special file

你可以将其放入.sh文件并运行来尝试相同的操作。该命令将在屏幕上输出结果。 - user4501715
@AnkurVerma 它不会显示任何匹配的行,但它会显示潜在的错误,比如找不到文件。 - that other guy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接