Homebrew的'install'警告是错误的吗?


0

使用已安装的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。这表明警告不是错误/失败,对吧?


只是一个想法。不太确定你所使用的Mac OS X版本,但是如果我bash -version在Mac OS X 10.9.5上从命令行查看,我会得到返回版本的3.2.53。这似乎与3.5.2你的警告线有关。
杰克古尔德2015年

Answers:


1

这听起来像brew应用程序打印的警告,但bash不知道错误。bash是否将其视为错误取决于应用程序是将其发送到错误流还是输出流,以及退出代码是什么。由于从脚本返回OK,bash认为命令返回0,这意味着bash命令成功运行。因此,brew必须向stdout发送此类型的警告,而不是stderr。

您是否了解如何使用2>将stderr重定向到文件?您可以在运行脚本时将stderr(2)和stdout重定向到两个不同的文件。然后,您可以看到警告打印到哪个流。

./script.sh > stdout.txt 2> stderr.txt

非常好,谢谢!事实上,brew的警告是自制软件重新指向stdout的错误?从本质上讲,自制软件正在欺骗bash,认为一切都是笨拙的,这是因为所有bash关心的是命令是否成功通过,对吗?Bash不关心真值,只关注逻辑有效性?
研究生2015年

这取决于应用程序是如何编写的 - brew的编写者可以选择让它以非零代码退出来进行bash,以使bash知道存在错误。显然,他们退出0(成功代码),然后打印brew错误。如果你编写一个bash脚本,你可以在不同的点插入exit指令,并设置退出代码(你想要的任何数字)。然后,您应该记录哪个代码意味着什么错误。例如,如果完全成功,则tar退出0,如果某些文件不同则退出1,或者对于致命错误退出2。退出代码也可以称为返回值或状态。
jdelaporte 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.