deinspanjer 에서 제공된 코드를 개선하면서 chocolatey ( choco 업데이트-noop / choco old) 와 비슷한 noop 명령을 모방하려고했습니다 .
https://git.io/vgjiL
#!/bin/sh
fetch(){
echo "Removing brew cache"
rm -rf "$(brew --cache)"
echo "Running brew update"
brew update
}
lookup() {
for c in $(brew cask list); do
brew cask info $c
done
}
update(){
var=$( lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1)
if [ -n "$var" ]; then
echo "The following installed casks have updates avilable:"
echo "$var"
echo "Install updates now?"
select yn in "Yes" "No"; do
case $yn in
"Yes") echo "updating outdated casks"; break;;
"No") echo "brew cask upgrade cancelled" ;return;;
*) echo "Please choose 1 or 2";;
esac
done
for i in $var; do
echo "Uninstalling $c"; brew cask uninstall --force "$i"; echo "Re-installing $i"; brew cask install "$i"
done
else
echo "all casks are up to date"
fi
}
fetch
update
보시다시피, 사용 사례가 약간 다르기 때문에 모듈 방식을 사용하고 있습니다. 컴퓨터 앞에 앉아서 설치 한 모든 앱에 대해 yes / no를 입력하고 싶지 않습니다. 캐스 크를 업그레이드하는 실제 방법은 없지만 (최신 버전을 다시 설치하면 됨) 먼저 실제로 업데이트가 가능하다는 정보를 얻기 위해 업데이트를 수행합니다 .
그런 다음 모든 통을 순환하여 정보를 표시합니다. 이전에 업데이트를했기 때문에 일부 통의 최신 버전이 설치되지 않았다는 정보가 제공됩니다.
내 업데이트 방법 내에서 실제로 해당 특정 행에 대한 info 명령을 구문 분석합니다.
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
"설치되지 않은"행을 읽을 때마다 제공된 정보의 3 줄을 제공하십시오. 그런 다음 링크가있는 행을 삭제하고 ':'가있는 행도 삭제하십시오. "
brew cask info 명령의 구조를 감안할 때, 한 줄 (버전 정보 없음, 앱 URL 없음)로 끝나는데, 이는 설치된 cask의 실제 이름을 반영합니다.
맥주 통 정보 출력
내 버전에서는이 정보가 인쇄되어 캐스 크가 오래되어 업데이트 할 수있는 것을 쉽게 볼 수 있습니다.
이 시점에서 나는 현재 상황을 업데이트하기에 시간이 충분하지 않기 때문에 스위치 케이스를 사용합니다. 사용 사례에 따라 다릅니다. 나를 위해 때로는 새로운 기능 (새 버전, 버그 수정 대기 중)을보고 싶지만 실제로 브라우저를 닫고 싶지 않기 때문에 실제로 업데이트 할 시간이 없습니다.
따라서 "yes"를 선택하면 업데이트 된 캐스 크 이름 목록이 업데이트 기능에 제공됩니다. 여기서 각 캐스 크가 오래된 것으로 판단되어 재설치가 실행됩니다.
deinspanjer에게 다시 한 번 감사드립니다. 나 자신을 위해이 문제를 해결하려고 노력하면서 항상 미리 업데이트를 발행하는 것을 잊어 버렸습니다. 따라서 실제로 구문 분석 할 "설치되지 않은"행이 없었습니다 (내 전체 접근 방식의 기초).
도움이 되었기를 바랍니다.