当使用已安装的brew install foo
命令时foo
返回
Warning: foo-3.5.2 already installed
从技术上讲,这是否像 stderr 一样是一个错误,或者该消息只是 stdout?文档中没有指定。我之所以问这个问题,是因为我有一个脚本,如下所示:
#!/bin/bash
brew install foo
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
(这是一个简单的脚本,可以帮助我学习 if-then 条件——不要判断!)每次运行它时,脚本都会OK
与上面的内容一起返回Warning
。这表明警告不是错误/失败,对吗?
答案1
这听起来像是 brew 应用程序打印的警告,但 bash 不知道这是一个错误。bash 是否将其视为错误取决于应用程序是将其发送到错误流还是输出流,以及退出代码是什么。由于您从脚本中返回了 OK,因此 bash 认为命令返回的是 0,这意味着 bash 命令已成功运行。因此,brew 必须将此类警告发送到 stdout,而不是 stderr。
您知道如何使用 2> 将 stderr 重定向到文件吗?您可以在运行脚本时将 stderr (2) 和 stdout 重定向到两个不同的文件。然后,您就可以看到警告被打印到哪个流。
./script.sh > stdout.txt 2> stderr.txt