왜 리디렉션이 괄호 밖에 있는지 궁금합니다. 이 라인에서
는 :
if ($PROG --version) </dev/null> /dev/null 2>&1; then
괄호는 if
문의 구문의 일부가 아닌; 그들은 단지 명령 그룹을 지정합니다. (그것은 자신이 기억하는 나에게 순간을했다; CSH/tcsh가, 는 if
문의 구문의 일부 괄호.) 예를 들어
이 :
(echo one ; echo two) | tr a-z A-Z
이 출력을 생성 : $PROG --version
이후이 경우
ONE
TWO
는, 하나의 명령이다, (
$PROG
하나 이상의 명령으로 확장하지 않는 한,하지만 같지도) 괄호는 필요하지 않습니다.
따라서 리디렉션은 if
문에는 적용되지 않습니다. $PROG --version
에 적용됩니다. 그 목적은 빈 파일에서 읽는 것처럼 입력을 제공하지 않고 $PROG
으로 제공하고 stdout 또는 stderr에 쓰는 내용을 무시합니다. $PROG
이 stdin에서 읽는 명령 인 경우 --version
으로 호출해도 입력 리디렉션없이 키보드 입력을 기다릴 수 있습니다.
$PROG
(무엇이든지간에) $PROG --version
이 오류를 생성하지 않는 경우에만 스크립트를 호출하는 것이 안전하다고 가정합니다. 당신이 if 문에 재 지정을 적용 할 수 있습니다
참고 :
if test_command ; then
something
else
something_else
fi </dev/null> /dev/null 2>&1
이 test_command
, something
, 및something_else
에 대한 입력 및 출력을 리디렉션합니다.
감사합니다. 나는'$ PROG'가 무엇인지 알고 있고'PROG --version'이 입력을 기다리지 않고 있다는 것을 알고 있다면 이것이 얼마나 유용한 지 아직 확실하지 않습니다. 예를 들어,'PROG = autoconf'는 내가 이것을 보았던 곳입니다.그리고 나는'autoconf --version'이 입력을 기다리지 않고 있다는 것을 알고 있습니다. 이 경우에도 여전히 유용합니까? –
@Carl Norum, 명령을 실행하기 위해'if ('$ PROG --version')'(꺽쇠 괄호)를 사용할 수 있고'/ dev/null'을 쓸 필요가 없습니까? – fduff
꺾쇠 괄호? –