如何仅打印 Bash 中的 stderr,而不打印 stdout?
2024-03-17 13:02:14
如何在 Bash 中仅打印 stderr,不打印 stdout
引言
在 Bash 中,stdout
(标准输出)和 stderr
(标准错误)是两个独立的流,分别用于显示信息和错误消息。默认情况下,这两个流都会输出到终端。但是,在某些情况下,你可能只想打印 stderr
,而不打印 stdout
。本文将介绍几种方法来实现这一目标。
使用重定向符号 >&
最简单的方法是使用重定向符号 >&
。例如,以下命令将 stderr
重定向到一个名为 error.txt
的文件中,同时丢弃 stdout
:
php -l "foo/bar.php" 2>&1 > /dev/null
这将仅在 error.txt
文件中打印错误消息,而不会打印 "No errors" 消息。
使用 tee
命令
tee
命令可以将输入同时写入文件和 stdout
。例如,以下命令将 stderr
重定向到 error.txt
文件,同时仍将其打印到终端:
php -l "foo/bar.php" 2>&1 | tee error.txt
这将同时在终端和 error.txt
文件中打印错误消息。
使用 grep
命令
如果你只想在终端中打印 stderr
,但不想将其写入文件,可以使用 grep
命令。例如,以下命令将仅打印 stderr
中包含 "error" 一词的行:
php -l "foo/bar.php" 2>&1 | grep error
这将仅在终端中打印错误消息,而不会将其写入文件。
使用 sed
命令
最后,你还可以使用 sed
命令来删除 stdout
。例如,以下命令将删除 stdout
中的所有行,只留下 stderr
:
php -l "foo/bar.php" 2>&1 | sed '/No errors/d'
这将仅在终端中打印错误消息,而不会打印 "No errors" 消息。
结论
通过使用这些技术,你可以选择性地打印 stderr
,而不打印 stdout
。这在需要捕获错误消息或隔离错误消息时非常有用。根据你的具体需求,选择最适合你的方法。
常见问题解答
-
如何使用
stderr
重定向错误消息?
使用重定向符号2>&1
将stderr
重定向到一个文件或命令。 -
如何同时将
stderr
打印到终端和文件?
使用tee
命令将stderr
同时写入文件和stdout
。 -
如何过滤
stderr
中的特定消息?
使用grep
命令过滤stderr
中包含特定模式的行。 -
如何删除
stdout
中的所有行?
使用sed
命令删除stdout
中的所有行,只留下stderr
。 -
是否可以使用管道将
stderr
传递给另一个命令?
是的,可以使用管道将stderr
传递给另一个命令进行进一步处理。