$ {var :? "foo"} 구문의 stderr를 리디렉션하는 방법은 무엇입니까?


0

bash를 사용하고 있으며 변수가 다음 명령으로 설정되지 않은 경우 표준 오류로 메시지를 인쇄하려고합니다.

echo ${var:?"This var is not set"}

이제 해당 오류 메시지를 파일로 리디렉션하고 싶습니다. 다음을 시도했지만 작동하지 않았습니다.

echo ${var:?"This var is not set"} > testfile

다음은 효과가 없었습니다.

echo ${var:?"This var is not set"} 2> testfile

그렇다면이 생성 된 메시지를 파일로 어떻게 보낼 수 있습니까?

답변:


0

에서 배쉬 참조 설명서 :

${parameter:?word}

경우 parameternull 또는 설정 해제의 확장 word(또는 그 결과에 대한 메시지 경우 word는, 종료 대화 형이 아닌 경우 존재하지 않는)은 표준 에러와 쉘에 기록됩니다. 그렇지 않으면의 값 parameter이 대체됩니다.

분명하지는 않지만 여기서 "표준 오류" 는 쉘 의 표준 오류 의미합니다 . 당신이 할 때 echo … 2> testfile당신의 표준 오류를 리디렉션 echo. 둘 다 일반적으로 터미널에서 끝나지만 동일하지 않습니다.

서브 쉘을 작성 하고 표준 오류를 재 지정하려는대로 작동 시키려면 다음을 수행하십시오 .

(echo ${var:?"This var is not set"}) 2> testfile

이것은 또한 작동합니다 :

{ echo ${var:?"This var is not set"}; } 2> testfile

실제 명령 ( echo)은 이미 재 지정된 서브 쉘의 표준 오류를 상속하므로 효과적으로이 재 지정이 두 가지 모두에 영향을 미칩니다. 명령이 언제인지는 중요하지 echo않지만 오류 메시지를 리턴하는 명령이 있습니다. 비교:

unset var
(dd ${var:?"This var is not set"}) 2> testfile
cat testfile
var=foo
(dd ${var:?"This var is not set"}) 2> testfile
cat testfile
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.