리디렉션 파일을 맞춤 순서로 만드는 방법

리디렉션 파일을 맞춤 순서로 만드는 방법

이것은 내 테스트 .sh파일입니다.

오류 및 출력.sh

#!/bin/bash

echo myecho
ls dflj

내가 달리면 ./errorandoutput.sh >file 2>&1우리는 이런 것을 얻을 수 있습니다file

STDOUT하지만 정보가 뒷면에 있기 를 바랍니다 STDERR. 그래서 명령을 다음으로 변경했습니다.

./errorandoutput.sh >file 1>&2

하지만 나는 빈 것을 얻습니다 file. 정보가 리디렉션 뒤에 있도록 하려면 어떻게 해야 합니까 STDOUT?STDERRfile


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}

관련 정보