표준 출력을 빈 파일로 리디렉션하여 동일한 결과를 쉽게 얻을 수 있는데 왜 많은 명령이 옵션을 제공하거나 -q
출력을 억제합니까 ?--quiet
답변1
셸에서는 쉽게 리디렉션할 수 있지만, 셸 명령줄을 사용하지 않고 다른 언어로 명령을 실행하는 등의 다른 상황에서는 쉽지 않습니다. 쉘에서도:
find . -type f -exec grep -q foo {} \; -printf '%s\n'
모두 포함된 내용을 인쇄하세요
foo
. 로 리디렉션하면 및 출력이/dev/null
모두 손실됩니다 . (즉, 추가 껍질을 생성하는 것) 에 의지해야 합니다 .find
grep
-exec sh -c 'exec grep foo "$1" > /dev/null' sh {} \;
grep -q foo
타이핑 시간이 생각보다 짧습니다.grep foo > /dev/null
- 다음으로 리디렉션한다는
/dev/null
것은 출력이 계속 기록된 다음 삭제됨을 의미합니다. 이는 출력을 쓰지 않는 것(및 할당하지 않고 기록할 출력을 준비하는 것)보다 덜 효율적입니다. - 추가 최적화를 허용합니다. 예를 들어
grep
with 는 출력이 필요하지 않다는 것을-q
알고 있으므로grep
첫 번째 일치 항목을 찾는 즉시 종료됩니다. 의 경우에는grep > /dev/null
여전히 모든 일치 항목을 찾으려고 시도합니다. - 조용한반드시 의미하는 것은 아니다조용한. 일부 명령의 경우 이는 다음을 의미합니다.자세한 내용을 줄입니다.(반대로
-v|--verbose
). 예를 들어 a 및 amplayer
가 있습니다 . 일부 명령의 경우 를 사용하여 자세한 내용을 3배로 줄일 수 있습니다.--quiet
--really-quiet
-qqq
답변2
화면에 주석을 추가해야 한다고 느낄 때 명령이 출력되도록 허용하지만 일반적으로 아무 것도 출력하지 않습니다. 모든 것을 null로 리디렉션하면 출력을 볼 기회가 없습니다.
답변3
이는 명령에 따라 달라질 수 있지만 -q
에 대한 출력도 비활성화됩니다 . 이렇게 하면 쉘이 stderr을 stdout( & stderr
으로 보고 있습니다 )으로 복사하는 것이 더 쉬워집니다.csh
tcsh
일부 프로그램은 상태 메시지로 인해 복잡해지고 싶지 않은 다른 의미 있는 출력이 있을 수 있는 상황에 대해 "조용한" 옵션을 제공합니다. 또는 이에 상응하는 기능은 모든 프로그램 상태 출력을 음소거하여 -q
예를 들어 또는 .tar
gzip
답변4
위의 모든 좋은 응답과 요점 외에도 각 플래그에 대해 반대 옵션을 제공하는 것이 가장 좋습니다. 따라서 -v
장황한 표현이 필요한 경우에는 -q
장황함, 침묵, 침묵이 있어서는 안 됩니다. (그러나 이것이 이 논의의 요점은 아닙니다...) 모든 짧은 옵션에는 긴 옵션도 있어야 -q
하며 --quiet
.
우리 사업의 거의 모든 것과 마찬가지로, 솔루션이나 동일한 결과를 달성하는 방법에는 여러 가지가 있습니다. 소유도 -q
그 중 하나입니다.