목록에서 설치되지 않은 패키지가 몇 개인지 확인하고 싶습니다. 저는 Archlinux를 사용하므로 pacman -Q를 사용하여 패키지가 설치되어 있는지 확인합니다. 설치되지 않은 경우 "오류: '패키지 이름' 패키지를 찾을 수 없습니다."와 같은 메시지가 반환됩니다.
다음과 같이 사용할 수 있을 것 같아요 grep -c 'error'
.
pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | grep -c 'error'
하지만 나에게는 다음과 같이 반환됩니다.
오류: 'bison' 패키지를 찾을 수 없습니다.
오류: 'pkg-config' 패키지를 찾을 수 없습니다.
0
0을 반환하지만 2를 반환하고 싶습니다. awk를 사용해도 작동하지 않습니다.
pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | awk '/error: / {count++} END {print count}'
나에게 이것은 다음을 반환합니다.
오류: 'bison' 패키지를 찾을 수 없습니다.
오류: 'pkg-config' 패키지를 찾을 수 없습니다.
그래서 내 생각엔 변수가 count
인쇄되지 않기 때문에 값조차 갖지 않는 것 같습니다. 나는 또한 그것을 시도했지만 wc -l
작동하지 않고 단지 0을 반환합니다.
제거된 패키지 수를 인쇄하는 올바른 방법은 무엇입니까?
편집: 이 작업을 수행했을 때 다음 사항을 발견했습니다.
pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config > tempfile
cat tempfile
오류 메시지가 포함된 두 줄은 추가되지 않습니다 tempfile
(나머지 명령 출력은 추가됨). 이것이 문제를 해결하는 데 도움이 될 수 있다고 생각했습니다.
답변1
문제는 오류 메시지가 STDOUT
으로 전송되지 않는다는 것입니다 STDERR
. STDERR
또한 다음과 같이 명시적으로 리디렉션해야 합니다 .
pacman -Q bison patch pkg-config 2>&1 | grep -c 'error'
bash 또는 zsh와 같은 것이 있으면 |&
자동 리디렉션 STDOUT
도 사용할 수 있습니다 STDERR
.
pacman -Q bison patch pkg-config |& grep -c 'error'
답변2
오류는 에 인쇄됩니다 stderr
. stdout
귀하의 파이프( )는 출력 |
만 볼 수 있습니다 . 파이프 앞쪽 으로 stdout
리디렉션하면 모든 출력이 다음을 통해 진행됩니다 .stderr
stdout
grep
pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config 2>&1 | grep -c 'error'
답변3
wc -l
이를 사용하여 출력 라인 수를 계산할 수 있습니다 .
따라서 pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | grep -c 'error'
출력은 다음과 같습니다.
error: package 'bison' was not found
error: package 'pkg-config' was not found
pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | grep -c 'error' | wc -l
grep이 한 줄을 출력하는 횟수를 계산하기 위해 실행할 수 있습니다 .