![출력되지 않도록 변수 문자열을 올바르게 이스케이프하세요.](https://linux55.com/image/116531/%EC%B6%9C%EB%A0%A5%EB%90%98%EC%A7%80%20%EC%95%8A%EB%8F%84%EB%A1%9D%20%EB%B3%80%EC%88%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%98%AC%EB%B0%94%EB%A5%B4%EA%B2%8C%20%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84%ED%95%98%EC%84%B8%EC%9A%94..png)
이 쉘 스크립트가 있습니다.
UNZIP_FOUND=$(dpkg-query -W --showformat='${Status}\n' unzip|grep "install ok installed")
if [ "" == "$UNZIP_FOUND" ]; then
echo unzip not found, I will install it
apt-get --assume-yes install unzip > /dev/null
fi
그러나 이것은 매번 다음과 같은 문장을 생성합니다.
dpkg-query: no packages found matching unzip
실제 설치 단계를 실행하기 전에.
그것을 제거하는 방법이 있습니까?
방금 dkpg-query 명령의 값을 할당했습니다.UNZIP_FOUND변수이지만 에코하고 싶지 않습니다.
이 작업을 수행하는 방법은 변수 할당을 ' 따옴표로 묶는 것이라고 읽었으며 다음과 같이 문자열을 이스케이프 처리해 보았습니다.
UNZIP_FOUND='$(dpkg-query -W --showformat=\'${Status}\n\' unzip|grep "install ok installed")'
하지만 작동하지 않습니다. 어쩌면 내 탈출이 나쁠 수도 있습니다.
답변1
당신은 간단히 할 수 있습니다
apt-get --assume-yes install unzip
설치되어 있으면 아무 작업도 수행되지 않습니다(오래된 경우가 아니면 업그레이드됩니다).
조용히 유지하려면 --quiet
해당 항목을 추가하거나 다음으로 리디렉션하세요 /dev/null
.
apt-get -qq --assume-yes install unzip
( "매우 조용함", 이 표지판에 대한 설명서를 -qq
참조하세요 )apt-get
패키지가 먼저 존재하는지 정말로 쿼리하고 싶다면 이렇게 할 수 있습니다.
if ! dpkg-query -W unzip >/dev/null 2>&1; then
apt-get --assume-yes install unzip
fi
dpkg-query
패키지를 찾을 수 없으면 0이 아닌 종료 상태로 종료합니다. 표준 출력과 표준 오류를 로 리디렉션합니다. /dev/null
거기에는 흥미로운 내용이 쓰여 있지 않기 때문입니다.
터미널에 오류 메시지가 표시되는 이유는 dpkg-query
오류가 표준 오류 스트림에 기록되는 반면 스크립트는 표준 출력 스트림만 캡처하기 때문입니다.
답변2
dpkg-query -W --showformat='${Status}\n' unzip 2>/dev/null