无法重定向所有自酿酒桶过时的输出吗?

时间:2019-10-11 16:07:46

标签: bash macos homebrew io-redirection homebrew-cask

我正在编写一个脚本来识别要升级的过期桶,因为brew cask upgrade不会升级所有带编号版本的桶,brew cask upgrade --greedy也会通过自动更新来升级那些桶。

但是当我使用brew cask outdated --greedy 2>&1 | grep -v '\(latest\)'通过自动更新滤除木桶时,它不起作用。

我的brew cask outdated --greedy输出是

google-drive-file-stream (latest) != latest
namechanger (3.4.2) != 3.4.3
quicklook-json (latest) != latest
timemachineeditor (latest) != latest
visual-studio-code (1.39.0) != 1.39.1
webpquicklook (latest) != latest

brew cask outdated --greedy 2>&1 | grep -v '\(latest\)'的输出为

google-drive-file-stream
namechanger
quicklook-json
timemachineeditor
visual-studio-code
webpquicklook

版本号丢失。

我认为使用2>&1应该将所有内容都重定向到stdout,但是显然版本号既不在stdout也不在stderr中。

我搜索了类似的问题,发现了一个here,其中命令直接输出到$(tty)。但这不是我的情况。 brew cask outdated --greedy &> /dev/null会删除所有输出,该命令不会直接输出到$(tty)

现在我很困惑,那些版本号可以去哪里?

1 个答案:

答案 0 :(得分:1)

我发现使用script作为解决方法来捕获文件中的终端输出,而不是尝试重定向stdoutstderr

tmp_file="$(mktemp)"
script -q "$tmp_file" brew cask outdated --greedy >/dev/null
grep -v "(latest)" "$tmp_file" | cut -d " " -f 1
rm "$tmp_file"