이것은 내 테스트 .sh
파일입니다.
오류 및 출력.sh
#!/bin/bash
echo myecho
ls dflj
내가 달리면 ./errorandoutput.sh >file 2>&1
우리는 이런 것을 얻을 수 있습니다file
STDOUT
하지만 정보가 뒷면에 있기 를 바랍니다 STDERR
. 그래서 명령을 다음으로 변경했습니다.
./errorandoutput.sh >file 1>&2
하지만 나는 빈 것을 얻습니다 file
. 정보가 리디렉션 뒤에 있도록 하려면 어떻게 해야 합니까 STDOUT
?STDERR
file
file
내 말은, 내가 좋아요를 받을 수 있었으면 좋겠다는 뜻이에요
ls: cannot access 'dflj': No such file or directory
myecho
답변1
이는 리디렉션 순서가 작동하는 방식이 아닙니다.
리디렉션 순서는 셸이 파일 내용이 아닌 파일 설명에 대해 작업을 수행하는 순서만 결정합니다.
존재하다:
./errorandoutput.sh >file 2>&1
먼저, 쉘은 표준 출력을 로 리디렉션 file
한 다음 표준 오류를 로 리디렉션합니다. 이는 이제 표준 출력을 가리키 file
므로 이제 표준 출력과 표준 오류는 모두 로 이동합니다 file
.
이 단계에서 쉘은 리디렉션을 완료했습니다. 파일 내용과는 아무런 관련이 없습니다 file
.
콘텐츠의 순서는 file
스크립트 내에서 실행하는 명령의 순서에 따라 결정됩니다. 스크립트를 다음과 같이 변경하세요.
#!/bin/bash
ls dflj
echo myecho
당신은 당신이 원하는 것을 얻을 것입니다.
답변2
이것'>'는 "1**>**"처럼 작동합니다.
이것은 작동합니다
./errorandoutput.sh 2>file 1>&2
$ ( echo yay ; fhgfhgf ) > out 2>&1
$ cat out
yay
bash: fhgfhgf: command not found
$ ( echo yay ; fhgfhgf ) 2> out 1>&2
$ cat out
yay
bash: fhgfhgf: command not found
답변3
중요한 경우 표준 출력을 파일로 보낸 다음 출력하십시오. 물론 이를 위해서는 스크립트가 필요합니다.
temp=/tmp/yc$$
yourcommand > ${temp}
cat ${temp} && rm -f ${temp}