无法重定向所有自制酒桶过时的输出?
Can't redirect all homebrew cask outdated output?
我正在编写一个脚本来确定要升级哪些过时的 casks,因为 brew cask upgrade
不会升级所有带有编号版本的 casks,并且 brew cask upgrade --greedy
也会升级那些具有自动更新功能的 casks。
但是当我使用 brew cask outdated --greedy 2>&1 | grep -v '\(latest\)'
过滤掉自动更新的 casks 时,它不起作用。
我的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)
.
现在我完全糊涂了,那些版本号去哪儿了?
我发现使用 script
作为解决方法来捕获文件中的终端输出在这里有效,而不是尝试重定向 stdout
或 stderr
.
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"
brew maintainer recommends 使用 brew outdated --verbose
。因此,不需要(不再)重定向输出,并且这些应该比脚本更好:
brew outdated --cask --greedy --verbose | grep -v '\(latest\)'
brew outdated --cask --greedy --json | jq 'select(.current_version != "latest")'
我正在编写一个脚本来确定要升级哪些过时的 casks,因为 brew cask upgrade
不会升级所有带有编号版本的 casks,并且 brew cask upgrade --greedy
也会升级那些具有自动更新功能的 casks。
但是当我使用 brew cask outdated --greedy 2>&1 | grep -v '\(latest\)'
过滤掉自动更新的 casks 时,它不起作用。
我的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)
.
现在我完全糊涂了,那些版本号去哪儿了?
我发现使用 script
作为解决方法来捕获文件中的终端输出在这里有效,而不是尝试重定向 stdout
或 stderr
.
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"
brew maintainer recommends 使用 brew outdated --verbose
。因此,不需要(不再)重定向输出,并且这些应该比脚本更好:
brew outdated --cask --greedy --verbose | grep -v '\(latest\)'
brew outdated --cask --greedy --json | jq 'select(.current_version != "latest")'