많은 명령이 “자동”옵션을 제공하는 이유는 무엇입니까? 결과를 쉽게 얻을 수있을 때 많은 명령이

표준 출력을 널 파일로 경로 재지 정하여 동일한 결과를 쉽게 얻을 수있을 때 많은 명령이 옵션을 제공 -q하거나 --quiet출력을 억제 하는 이유는 무엇 입니까?



답변

  • 쉘에서 쉽게 재 지정할 수 있지만 쉘 명령 행을 사용하지 않고 다른 언어로 명령을 실행할 때처럼 쉽지 않은 다른 컨텍스트가 있습니다. 껍질에서도 :

    find . -type f -exec grep -q foo {} \; -printf '%s\n'

    포함 된 모든 파일의 크기를 인쇄합니다 foo. 로 리디렉션하면 출력 과 출력이 /dev/null모두 손실됩니다 . 당신은 의지해야합니다 (즉, 여분의 껍질을 생성하십시오).findgrep-exec sh -c 'exec grep foo "$1" > /dev/null' sh {} \;

  • grep -q foo 입력하기보다 짧다 grep foo > /dev/null
  • 방향 전환 /dev/null은 출력이 여전히 쓰여지고 버려지는 것을 의미합니다. 출력을 쓰지 않는 것보다 비효율적입니다.
  • 추가 최적화가 가능합니다. 의 경우 grep와 이후 예를 들어 -q, grep그것은 첫 경기를 발견로 출력이 필요하지 않습니다 알고, 그것을 즉시 종료됩니다. 를 사용하면 grep > /dev/null여전히 모든 일치 항목을 찾으려고 시도합니다.
  • 조용한 것이 반드시 침묵을 의미 하는 것은 아닙니다 . 일부 명령의 경우 자세한 표시를 줄입니다 (의 반대 -v|--verbose). 예를 들어 mplayera --quiet와 a가 --really-quiet있습니다. 일부 명령을 사용 -qqq하면 세부 정보를 3 번 ​​줄일 수 있습니다 .

답변

화면에 메모해야 할 때 명령을 내릴 수는 있지만 일반적으로 아무것도 출력하지 않습니다. all을 null로 리디렉션하면 출력을 볼 가능성이 없습니다.


답변

명령에 따라 다르지만에 대한 -q출력도 비활성화합니다 stderr. 이것은 잡음을 피하기 위해 stderr를 stdout에 쉽게 넣을 수없는 쉘을 허용합니다 (나는 당신을보고 있습니다 csh& & tcsh).

일부 프로그램은 상태 메시지가 혼동되기를 원하지 않는 다른 의미있는 출력이있을 수있는 상황에 대해 “자동”옵션을 제공합니다. -q또는 이와 동등한 말에서 순수한 데이터 스트림을 허용, 모든 프로그램 상태 출력을 침묵 것 targzip.


답변

위의 모든 좋은 반응과 요점 외에. 모든 플래그에 반대 옵션을 제공하는 것이 가장 좋습니다. 따라서 자세한 정보 표시에 -v가 있으면 비 상세 정보, 꽤 또는 침묵의 경우 -q가 있어야합니다. (이것은 논의의 핵심은 아니지만 …) 짧은 모든 -q와 –quite에 대한 긴 옵션이어야합니다.

비즈니스의 거의 모든 것과 마찬가지로 솔루션이나 동일한 결과를 얻는 방법은 여러 가지가 있습니다. -q를 갖는 것이 그중 하나입니다.