누군가가 차이점을 명확히 해줄 수 있습니까? 그 중 일부는 모범 사례로 간주됩니까? 내가 올바르게 기억한다면 나는 어떻게 든 이렇게 읽었다. 1>/dev/null
이 앞에 와야합니다 : 2>&1
ls -al /doesNotExists 2>&1 1>/dev/null
ls -al /doesNotExists 1>/dev/null 2>&1
ls -al /doesNotExists 1>&2 2>/dev/null
ls -al /doesNotExists 2>/dev/null 1>&2
ls -la /doesNotExists 2<&1 1>/dev/null
ls -la /doesNotExists 2<&1 2>/dev/null
ls -la /doesNotExists 1<&2 1>/dev/null
ls -la /doesNotExists 1<&2 2>/dev/null
ls -la /doesNotExists 1>/dev/null 2<&1
ls -la /doesNotExists 2>/dev/null 2<&1
ls -la /doesNotExists 1>/dev/null 1<&2
ls -la /doesNotExists 2>/dev/null 1<&2
답변
셸 표준 스트림 리디렉션 순서
결과가 다른 경우 주문이 중요합니다. 첫 번째 예를 들어보십시오.
ls -al /doesNotExists 2>&1 1>/dev/null
이것은 표준 오류가 표준 출력으로 복제되었으므로 표준 출력 만 nul로 지시합니다 전에 표준 출력이 dirlist로 리디렉션되었습니다.
ls -al /doesNotExists 1>/dev/null 2>&1
이렇게하면 표준 출력과 표준 오류가 모두 null로 리디렉션됩니다.
Bash 참조 설명서 : 리디렉션
리디렉션 순서는 중요합니다. 예를 들어,
명령ls > dirlist 2>&1
표준 출력 (파일 설명자 1)과 표준 오류
(파일 기술자 2)를 파일 dirlist에 보내고, 명령ls 2>&1 > dirlist
표준 출력만을 파일 dirlist로 보냅니다. 왜냐하면 표준
표준 이전에 표준 출력 사본이 만들어지지 않았습니다.
출력이 dirlist로 리디렉션되었습니다.
지도 시간
에 그림이있는 튜토리얼이 있습니다. 일러스트 리디렉션 자습서 이를 쉽게 이해할 수 있습니다.
리디렉션 순서, 즉 “& gt; 파일 2 & 1″대 “2 & 1 & 1″파일
명령에서 재 지정이 나타나는 위치는 중요하지 않지만
그들의 명령은 중요합니다. 왼쪽에서 오른쪽으로 설정됩니다.2>&1 >file
일반적인 오류는 명령 2 & gt; 1 & gt;을 수행하는 것입니다. 파일을 stderr로 리다이렉트한다.
파일로 stdout. 무슨 일이 일어나는지 보자. 먼저
명령을 사용하는 경우 설명자는 다음과 같습니다.--- +-----------------------+ standard input ( 0 ) ---->| /dev/pts/5 | --- +-----------------------+ --- +-----------------------+ standard output ( 1 ) ---->| /dev/pts/5 | --- +-----------------------+ --- +-----------------------+ standard error ( 2 ) ---->| /dev/pts/5 | --- +-----------------------+
그러면 우리 쉘인 Bash는 2> & amp; 1이므로 1을 복제하고, 파일
설명자는 다음과 같습니다.--- +-----------------------+ standard input ( 0 ) ---->| /dev/pts/5 | --- +-----------------------+ --- +-----------------------+ standard output ( 1 ) ---->| /dev/pts/5 | --- +-----------------------+ --- +-----------------------+ standard error ( 2 ) ---->| /dev/pts/5 | --- +-----------------------+
맞습니다. 아무것도 바뀌지 않았습니다. 2는 이미 동일한 것을 가리키고있었습니다.
1. Bash는 & gt; 파일 및 따라서 stdout 변경 :--- +-----------------------+ standard input ( 0 ) ---->| /dev/pts/5 | --- +-----------------------+ --- +-----------------------+ standard output ( 1 ) ---->| file | --- +-----------------------+ --- +-----------------------+ standard error ( 2 ) ---->| /dev/pts/5 | --- +-----------------------+
그리고 그것은 우리가 원하는 것이 아닙니다.
>file 2>&1
이제 올바른 명령 & gt; 파일 2 & amp; 1을 살펴 보겠습니다. 우리는
이전 예와 Bash는 & gt; 파일:--- +-----------------------+ standard input ( 0 ) ---->| /dev/pts/5 | --- +-----------------------+ --- +-----------------------+ standard output ( 1 ) ---->| file | --- +-----------------------+ --- +-----------------------+ standard error ( 2 ) ---->| /dev/pts/5 | --- +-----------------------+
그런 다음 우리의 복제가 2> & 1 :
--- +-----------------------+ standard input ( 0 ) ---->| /dev/pts/5 | --- +-----------------------+ --- +-----------------------+ standard output ( 1 ) ---->| file | --- +-----------------------+ --- +-----------------------+ standard error ( 2 ) ---->| file | --- +-----------------------+
또한, 1과 2는 모두 파일로 리디렉션됩니다.