"2>&1"은 무엇을 의미합니까?
를 조합하는 것.stderr그리고.stdoutstdout스트림, 다음 명령에 추가합니다.
2>&1
를 들어 컴파일 시 몇 의 오류를 " " " " " " " "g++ main.cpp:
g++ main.cpp 2>&1 | head
가 입니까?2>&1구체적으로?
출력입니다.stdout).
오류입니다.stderr).
처에는.2>1리다이렉트하는 좋은 방법처럼 보일 수 있습니다.stderrstdout 그실리는로로 "트렉이다니 "됩다해석 "러나제로 "로 입니다.stderr 이름이 " 라이파로일의름"인 1".
&뒤에 오는 것과 앞에 오는 것은 파일 이름이 아니라 파일 설명자임을 나타냅니다.따라서, 우리는2>&1해 보세요.고려하다>&리다이렉트 합병 운영자가 되는 것.
을 stdout으로 다음과 같이 .file.txt:
echo test > file.txt
이는 다음과 같습니다.
echo test 1> file.txt
을 stderr로 다음과 같이 .file.txt:
echo test 2> file.txt
그렇게>&는 스트림을 다른 파일 설명자로 리디렉션하는 구문입니다.
- 0은 stdin입니다.
- 1은 stdout입니다.
- 2는 stderr입니다.
stdout을 stderr로 리디렉션하는 방법
echo test 1>&2 # equivalently, echo test >&2
stderr을 stdout으로 리디렉션하는 방법
echo test 2>&1
따서라에서는,2>&1:
2>file.stderr로 .&1stderr으로 .
리디렉션에 대한 몇 가지 요령
이에 대한 일부 구문 특수성에는 중요한 동작이 있을 수 있습니다.방향 수정에 대한 약간의 샘플이 있습니다.STDERR,STDOUT및 인수 순서 지정.
1 - 덮어쓰기 또는 추가?
기.>리디렉션을 의미합니다.
>전체 완료된 파일로 전송, 존재하는 경우 대상을 덮어씁니다( 참조).noclobberbash 기능은 나중에 #3에 표시됩니다.>>는 대상에 추가로 보내는 것을 의미합니다(존재하는 경우 대상에 추가됩니다.
어떤 경우에도 파일이 존재하지 않으면 파일이 생성됩니다.
2 - 셸 명령줄은 순서에 따라 다릅니다!!
이를 테스트하려면 두 출력 모두에 대해 무언가를 전송하는 간단한 명령이 필요합니다.
$ ls -ld /tmp /tnt
ls: cannot access /tnt: No such file or directory
drwxrwxrwt 118 root root 196608 Jan 7 11:49 /tmp
$ ls -ld /tmp /tnt >/dev/null
ls: cannot access /tnt: No such file or directory
$ ls -ld /tmp /tnt 2>/dev/null
drwxrwxrwt 118 root root 196608 Jan 7 11:49 /tmp
이 붙은 가 없을 것으로 됨)/tnt .자, 있습니다!!
자, 어디 보자꾸나:
$ ls -ld /tmp /tnt >/dev/null
ls: cannot access /tnt: No such file or directory
$ ls -ld /tmp /tnt >/dev/null 2>&1
$ ls -ld /tmp /tnt 2>&1 >/dev/null
ls: cannot access /tnt: No such file or directory
덤프는 다음과 같습니다.STDERR기대했던 행동이 아닌 것 같아요그렇지만.....
표준 출력, 오류 출력 또는 둘 다에 대해 사후 필터링을 수행하려면 다음을 수행합니다.
$ ls -ld /tmp /tnt | sed 's/^.*$/<-- & --->/'
ls: cannot access /tnt: No such file or directory
<-- drwxrwxrwt 118 root root 196608 Jan 7 12:02 /tmp --->
$ ls -ld /tmp /tnt 2>&1 | sed 's/^.*$/<-- & --->/'
<-- ls: cannot access /tnt: No such file or directory --->
<-- drwxrwxrwt 118 root root 196608 Jan 7 12:02 /tmp --->
$ ls -ld /tmp /tnt >/dev/null | sed 's/^.*$/<-- & --->/'
ls: cannot access /tnt: No such file or directory
$ ls -ld /tmp /tnt >/dev/null 2>&1 | sed 's/^.*$/<-- & --->/'
$ ls -ld /tmp /tnt 2>&1 >/dev/null | sed 's/^.*$/<-- & --->/'
<-- ls: cannot access /tnt: No such file or directory --->
이 단락의 마지막 명령줄은 이전 단락과 정확히 동일하며, 여기서 제가 작성한 것은 예상된 동작이 아닌 것 같습니다(따라서 예상된 동작일 수도 있음).
두 출력에 대해 서로 다른 작업을 수행하기 위한 리디렉션에 대한 약간의 요령이 있습니다.
$ ( ls -ld /tmp /tnt | sed 's/^/O: /' >&9 ) 9>&2 2>&1 | sed 's/^/E: /'
O: drwxrwxrwt 118 root root 196608 Jan 7 12:13 /tmp
E: ls: cannot access /tnt: No such file or directory
참고:&9설명자는 때문에 자발적으로 발생할 것입니다.) 9>&2.
부록: nota!새로운 버전의 bash(>4.0 수 있는 과 더 .
$ ls -ld /tmp /tnt 2> >(sed 's/^/E: /') > >(sed 's/^/O: /')
O: drwxrwxrwt 17 root root 28672 Nov 5 23:00 /tmp
E: ls: cannot access /tnt: No such file or directory
마지막으로 이러한 계단식 출력 형식의 경우:
$ ((ls -ld /tmp /tnt |sed 's/^/O: /' >&9 ) 2>&1 |sed 's/^/E: /') 9>&1| cat -n
1 O: drwxrwxrwt 118 root root 196608 Jan 7 12:29 /tmp
2 E: ls: cannot access /tnt: No such file or directory
부록: nota!두 가지 방식으로 동일한 새로운 구문:
$ cat -n <(ls -ld /tmp /tnt 2> >(sed 's/^/E: /') > >(sed 's/^/O: /'))
1 O: drwxrwxrwt 17 root root 28672 Nov 5 23:00 /tmp
2 E: ls: cannot access /tnt: No such file or directory
에▁where디STDOUT 필터인 특정필를통니다합과터,를 거칩니다.STDERR마지막으로 병합된 두 출력은 세 번째 명령 필터를 통과합니다.
- 사용 - 사용|&대신에
문command |& ...의 별칭으로 사용할 수 있습니다.command 2>&1 | ...명령줄 순서에 대해서도 동일한 규칙이 적용됩니다.자세한 내용은 bash에서 연산자 |&의 의미는 무엇입니까?
- 에 대한 - 에대한마디한마디한▁about▁3한▁-대▁3▁word▁-.noclobber 및 옵션>|
덮어쓰는 것이 중요합니다.
하는 동안에set -o noclobberbash에 기존 파일을 덮어쓰지 않도록 지시합니다.>|구문을 사용하면 이 제한을 통과할 수 있습니다.
$ testfile=$(mktemp /tmp/testNoClobberDate-XXXXXX)
$ date > $testfile ; cat $testfile
Mon Jan 7 13:18:15 CET 2013
$ date > $testfile ; cat $testfile
Mon Jan 7 13:18:19 CET 2013
$ date > $testfile ; cat $testfile
Mon Jan 7 13:18:21 CET 2013
파일은 매번 덮어씁니다. 이제는 다음과 같습니다.
$ set -o noclobber
$ date > $testfile ; cat $testfile
bash: /tmp/testNoClobberDate-WW1xi9: cannot overwrite existing file
Mon Jan 7 13:18:21 CET 2013
$ date > $testfile ; cat $testfile
bash: /tmp/testNoClobberDate-WW1xi9: cannot overwrite existing file
Mon Jan 7 13:18:21 CET 2013
통을니다합으로 하세요.>|:
$ date >| $testfile ; cat $testfile
Mon Jan 7 13:18:58 CET 2013
$ date >| $testfile ; cat $testfile
Mon Jan 7 13:19:01 CET 2013
이 옵션의 설정을 취소하거나 이미 설정된 경우 문의합니다.
$ set -o | grep noclobber
noclobber on
$ set +o noclobber
$ set -o | grep noclobber
noclobber off
$ date > $testfile ; cat $testfile
Mon Jan 7 13:24:27 CET 2013
$ rm $testfile
4 - 마지막 속임수와 그 이상...
지정된 명령에서 두 출력을 모두 리디렉션하는 경우 올바른 구문은 다음과 같습니다.
$ ls -ld /tmp /tnt >/dev/null 2>&1
이 특수한 경우에는 바로 가기 구문이 있습니다.&>또는>&
$ ls -ld /tmp /tnt &>/dev/null
$ ls -ld /tmp /tnt >&/dev/null
참고: 존재하는 경우 구문도 정확합니다.
$ ls -ld /tmp /tnt 2>/dev/null 1>&2
4b- 이제 다음에 대해 생각해 보겠습니다.
$ ls -ld /tmp /tnt 2>&1 1>&2 | sed -e s/^/++/
++/bin/ls: cannot access /tnt: No such file or directory
++drwxrwxrwt 193 root root 196608 Feb 9 11:08 /tmp/
$ ls -ld /tmp /tnt 1>&2 2>&1 | sed -e s/^/++/
/bin/ls: cannot access /tnt: No such file or directory
drwxrwxrwt 193 root root 196608 Feb 9 11:08 /tmp/
4c - 더 많은 정보에 관심이 있는 경우
다음을 눌러 세부 설명서를 읽을 수 있습니다.
man -Len -Pless\ +/^REDIRECTION bash
bash 콘솔에서 ;-)
리다이렉션에 관한 멋진 게시물을 발견했습니다.리디렉션에 대한 모든 정보
표준 출력과 표준 오류를 모두 파일로 리디렉션
명령 &>파일
이 원라이너는 다음을 사용합니다.&>연산자를 사용하여 명령에서 파일로 두 출력 스트림(stdout 및 stderr)을 모두 리디렉션합니다.이것은 두 스트림을 동일한 대상으로 빠르게 리디렉션하는 Bash의 바로 가기입니다.
Bash가 두 스트림을 모두 리디렉션한 후의 파일 설명자 테이블은 다음과 같습니다.
보다시피, stdout과 stderr 모두 이제 다음을 가리키고 있습니다.file그래서 stdout과 stderr에게 쓰여진 모든 것은.file.
두 스트림을 동일한 대상으로 리디렉션하는 방법은 여러 가지가 있습니다.각 스트림을 차례로 리디렉션할 수 있습니다.
명령 >파일 2 >&1
이 방법은 두 스트림을 파일로 리디렉션하는 훨씬 일반적인 방법입니다.첫 번째 stdout은 파일로 리디렉션된 다음 stdout과 동일하도록 stderr이 복제됩니다. 두 모두 ▁to를 가리키게 됩니다.file.
Bash는 여러 리디렉션을 볼 때 왼쪽에서 오른쪽으로 리디렉션을 처리합니다.이제 단계를 살펴보고 어떻게 그런 일이 일어나는지 살펴보겠습니다.명령을 실행하기 전에 Bash의 파일 설명자 테이블은 다음과 같습니다.
이제 Bash는 첫 번째 리디렉션 > 파일을 처리합니다.이전에도 본 적이 있는 내용으로 stdout이 파일 단위로 표시됩니다.
다음 Bash는 두 번째 리디렉션 2>&1을 봅니다.이 리디렉션은 이전에 본 적이 없습니다.이것은 파일 디스크립터 2를 파일 디스크립터 1의 복사본으로 복제하고 다음과 같은 결과를 얻습니다.
두 스트림이 모두 파일로 리디렉션되었습니다.
하지만 여기서는 조심하세요!쓰기
명령 >파일 2 >&1
다음을 쓰는 것과 같지 않습니다.
명령 2>&1>파일
Bash에서 리디렉션 순서가 중요합니다!이 명령은 표준 출력만 파일로 리디렉션합니다.stderr는 계속해서 터미널로 인쇄됩니다.이러한 현상이 발생하는 이유를 이해하기 위해 단계를 다시 살펴보겠습니다.따라서 명령을 실행하기 전에 파일 설명자 테이블은 다음과 같습니다.
이제 Bash는 왼쪽에서 오른쪽으로 리디렉션을 처리합니다.그것은 먼저 2>&1을 보기 때문에 stdout에 stderr을 복제합니다.파일 설명자 테이블은 다음과 같습니다.
는 두 이제배시두번방봅니다향을째는▁the,를 봅니다.>file을 filestdout으로 .
여기서 무슨 일이 일어나는지 보세요?이제 Stdout은 파일을 가리키지만 Stderr은 여전히 터미널을 가리킵니다!stderr에 기록된 모든 내용은 여전히 화면에 인쇄됩니다!따라서 리디렉션 순서에 매우 매우 주의하십시오!
또한 Bash에서 쓰는 것은
명령 &>파일
는 다음과 정확히 동일합니다.
명령 >&file
숫자는 파일 설명자(fd)를 나타냅니다.
- 은 0입니다.
stdin - 는 나는입니다.
stdout - 는 2.
stderr
2>&1fd 2/1로 .
이것은 프로그램에서 파일 설명자를 사용하는 경우 파일 설명자 수에 관계없이 작동합니다.
를 볼 수 ./usr/include/unistd.h만약 당신이 그것들을 잊어버린다면,
/* Standard file descriptors. */
#define STDIN_FILENO 0 /* Standard input. */
#define STDOUT_FILENO 1 /* Standard output. */
#define STDERR_FILENO 2 /* Standard error output. */
그것은 제가 커스텀 로깅을 위해 비표준 파일 설명자를 사용하는 C 도구를 작성했다는 것을 의미합니다. 그래서 파일이나 다른 것으로 리디렉션하지 않으면 볼 수 없습니다.
스트림을 합니다.stderr) 표준 출력의 현재 위치(stdout - 이답변들에 으로 보입니다.) - 이통화문제다의무것보으입다니로된시해답변른에는▁)다보입.
을 다른 핸들로 수 채널링할 때 됩니다.stdout그리고.stderr처리를 위해 단일 스트림으로 스트림됩니다.
몇 가지 예는 다음과 같습니다.
# Look for ERROR string in both stdout and stderr.
foo 2>&1 | grep ERROR
# Run the less pager without stderr screwing up the output.
foo 2>&1 | less
# Send stdout/err to file (with append) and terminal.
foo 2>&1 |tee /dev/tty >>outfile
# Send stderr to normal location and stdout to file.
foo >outfile1 2>&1 >outfile2
마지막 것은 지시하지 않습니다.stderroutfile2그것은 그것을 무엇으로 리디렉션합니다.stdout인수가 발생했을 때(outfile1)한 다음 리디렉션stdoutoutfile2.
이것은 꽤 정교한 속임수를 허용합니다.
만약 당신이 초보자라면 이것을 읽는 것이 매우 도움이 된다는 것을 알았습니다.
Linux 또는 Unix 시스템에서 프로그램이 출력을 보내는 두 위치는 표준 출력(stdout)과 표준 오류(stderr)입니다.이러한 출력을 임의의 파일로 리디렉션할 수 있습니다.
됩니다.ls -a > output.txt
콘솔에서 아무것도 인쇄되지 않습니다. 출력(stdout)은 출력 파일로 리디렉션됩니다.
또한 종료되지 않은 파일의 내용을 인쇄하려고 하면 출력이 인쇄 테스트와 같은 오류가 발생합니다.현재 디렉터리에 없는 txt
cat test.txt > error.txt
출력은 다음과 같습니다.
cat: test.txt :No such file or directory
stdout이 아닌 에 파일 이름.txt .
따라서 파일 설명자가 필요합니다(파일 설명자는 열린 파일을 나타내는 양의 정수에 불과합니다).설명자가 파일의 고유 ID라고 할 수 있습니다.)를 사용하여 셸에 파일로 보낼 출력 유형을 지정할 수 있습니다.Unix/Linux에서 시스템 1은 stdout용이고 2는 stderr용입니다.
그래서 지금 당신이 이것을 한다면.
ls -a 1> output.txt표준 출력(stdout)을 출력으로 보내는 것을 의미합니다.txt의
그리고 만약 당신이 이렇게 한다면,cat test.txt 2> error.txt 오류를 error " " (stderr)" 오류로 합니다.txt로 보내고 있음을 의미합니다.
&1파일 설명자 1(stdout)의 값을 참조하는 데 사용됩니다.
으로 들어갑시다.2>&1는 ""을 의미합니다."stdoutstderr"는 "stdderr"입니다.
은 이것을 할 수.
<br>
cat maybefile.txt > output.txt 2>&1
표준 출력(stdout)과 표준 오류(stderr)가 모두 출력으로 리디렉션됩니다.txt의
2는 콘솔 표준 오류입니다.
1은 콘솔 표준 출력입니다.
이것은 표준 Unix이며 Windows도 POSIX를 따릅니다.
예: 실행할 때
perl test.pl 2>&1
표준 오류는 표준 출력으로 리디렉션되므로 두 출력을 함께 볼 수 있습니다.
perl test.pl > debug.log 2>&1
실행 후 debug.log에서 오류를 포함한 모든 출력을 볼 수 있습니다.
perl test.pl 1>out.log 2>err.log
그런 다음 표준 출력은 out.log로 이동하고 표준 오류는 err.log로 이동합니다.
저는 당신이 이것들을 이해하기 위해 노력할 것을 제안합니다.
2>&1POSIX 셸 구조입니다.토큰별 분류는 다음과 같습니다.
2"표준 오류" 출력 파일 설명자입니다.
>&출력 파일 설명자 연산자(출력 리디렉션 연산자의 변형) 복제> )입니다.[x]>&[y]로표된파설로 x 파일 출력설의복만의 .y.
1"표준 출력" 출력 파일 설명자.
그표은라는 2>&1 설명자 복자사명12그래서 모든 출력이 작성되었습니다.2실행 환경의 ("표준 오류")는 원래 다음과 같은 파일로 이동합니다.1("표준 출력").
추가 설명:
파일 설명자: "파일 액세스를 위해 열려 있는 파일을 식별하는 데 사용되는 프로세스별 고유하고 음수가 아닌 정수입니다."
표준 출력/오류: 셸 설명서의 리디렉션 섹션에 있는 다음 참고 사항을 참조하십시오.
열려 있는 파일은 0으로 시작하는 10진수로 표시됩니다.가능한 가장 큰 값은 구현 정의입니다. 그러나 모든 구현은 애플리케이션에서 사용할 수 있도록 최소 0에서 9까지 지원해야 합니다.이러한 숫자를 "파일 설명자"라고 합니다.0, 1 및 2 값은 특별한 의미와 관습적인 용도를 가지며 특정 리디렉션 작업에 의해 암시됩니다. 이러한 값을 각각 표준 입력, 표준 출력 및 표준 오류라고 합니다.프로그램은 일반적으로 표준 입력에서 입력을 가져오고 표준 출력에서 쓰기 출력을 가져옵니다.오류 메시지는 일반적으로 표준 오류에 기록됩니다.리디렉션 연산자 앞에 하나 이상의 숫자(간섭 문자가 허용되지 않음)를 지정하여 파일 설명자 번호를 지정할 수 있습니다.
질문에 대한 답변:오류 출력(일반적으로 stderr로 전송됨)을 사용하여 표준 출력(stdout)에 기록합니다.
이는 예를 들어 모든 출력에 대해 페이징이 필요한 경우 '추가'하는 데 도움이 됩니다.사용 정보를 stderr로 인쇄하는 것과 같은 프로그램도 있습니다.
당신이 기억하는 것을 돕기 위해.
- 1 = 표준 출력(프로그램이 일반 출력을 인쇄하는 경우)
- 2 = 표준 오류(프로그램이 오류를 인쇄하는 경우)
"2>&1"은 단순히 stderr에게 보내는 모든 것을 가리키고 대신 stdout을 가리킵니다.
저는 또한 이 주제가 자세히 다뤄지는 오류 리디렉션 시 이 게시물을 읽는 것을 추천합니다.
프로그래머의 관점에서 이것은 정확히 다음을 의미합니다.
dup2(1, 2);
맨 페이지를 참조하십시오.
에 대한 이해하기2>&1복사본은 또한 ...의 이유를 설명합니다.
command >file 2>&1
...와 같지 않습니다.
command 2>&1 >file
는 두 을 모두 번두스다전송합니다로음으첫을트로 합니다.file반면에 두 번째는 오류를 보낼 것입니다.stdout그리고 일반적인 출력.file.
여러분, 방향 수정 대상의 현재 위치에 대한 팍스 디아블로의 힌트를 항상 기억하세요...그것은 중요합니다.
인▁에 대한 나의 개인적인 기억력.2>&1연산자는 다음과 같습니다.
- 을 생각하다
&'and'또는'add'(캐릭터는 앰퍼서더입니다. 그렇죠?) - 즉, '이미(stdout)가 있는 곳으로 리디렉션(stderr)하고 두 스트림을 모두 추가합니다.'가 됩니다.
사용되는 리다이렉션에도 1>&2:
- 을 생각하다
&미의라는and또는add(앰퍼샌드에 대한 아이디어를 알고 계시죠?) - 즉, '이미 (stderr)가 있는 곳으로 리디렉션(stdout)하고 두 스트림을 모두 추가합니다.'가 됩니다.
그리고 항상 기억하세요: 여러분은 오른쪽에서 왼쪽으로(왼쪽에서 오른쪽이 아니라) '끝에서' 방향 변경 체인을 읽어야 합니다.
unix_commands 2>&1
터미널에 오류를 인쇄하는 데 사용됩니다.
- 오류가 생성되면 메모리 주소의 "표준 오류" 버퍼에 기록됩니다.
&2,그리고.2해당 버퍼의 참조 및 스트림. - 출력이 생성되면 메모리 주소의 "표준 출력" 버퍼에 기록됩니다.
&1,그리고.1해당 버퍼의 참조 및 스트림.
다시 사령부로 돌아가겠습니다. 프그램언든지제은로▁program.unix_commands오류가 발생하면 오류 버퍼에 기록됩니다.그래서 우리는 그 버퍼에 대한 포인터를 만듭니다.2 리디렉션>출력 버퍼의 오류&1출력 버퍼의 모든 것이 단말기에 의해 읽고 인쇄되기 때문에 이 시점에서 우리는 끝입니다.
입력 리디렉션
입력의 리디렉션은 단어 확장으로 인해 이름이 생성된 파일을 파일 설명자 n에서 읽기 위해 열리게 하거나, n이 지정되지 않은 경우 표준 입력(파일 설명자 0)을 열게 합니다.
입력을 리디렉션하는 일반적인 형식은 다음과 같습니다.
[n]<word출력 리디렉션
출력의 리디렉션은 단어 확장으로 인해 이름이 생성된 파일을 파일 설명자 n에 쓰기 위해 열리게 하거나, n이 지정되지 않은 경우 표준 출력(파일 설명자 1)을 열게 합니다.파일이 없으면 파일이 생성되고 파일이 있으면 크기가 0으로 잘립니다.
출력 리디렉션의 일반적인 형식은 다음과 같습니다.
[n]>word파일 설명자 이동
리디렉션 연산자,
[n]<&digit-파일 설명자 숫자를 파일 설명자 n으로 이동하거나, n이 지정되지 않은 경우 표준 입력(파일 설명자 0)을 이동합니다. 숫자는 n으로 복제된 후 닫힙니다.
마찬가지로, 리디렉션 연산자는
[n]>&digit-파일 설명자 숫자를 파일 설명자 n으로 이동하거나, n이 지정되지 않은 경우 표준 출력(파일 설명자 1)으로 이동합니다.
참조:
man bash
형/^REDIRECT위치를 파악하기 위해redirection섹션 및 자세한 내용...
온라인 버전은 다음과 같습니다: 3.6 Redirections
PS:
많시간이들은▁lots.man리눅스를 배울 수 있는 강력한 도구였습니다.
단이라면,/foo에 존재하지 "는 " " 입니다./tmp…합니까?
$ ls -l /tmp /foo
인다니합의 합니다./tmp를 출력합니다./foo
$ ls -l /tmp /foo > /dev/null
는 의내을 것다니입의 것입니다./tmp/dev/null를 출력합니다./foo
$ ls -l /tmp /foo 1> /dev/null
정확히 동일한 작업을 수행합니다(1 참조).
$ ls -l /tmp /foo 2> /dev/null
인다니합의 합니다./tmp를 다으로오메보냅다니를지시류음▁the다로 보냅니다./dev/null
$ ls -l /tmp /foo 1> /dev/null 2> /dev/null
목과오메에보냅다니로 보냅니다./dev/null
$ ls -l /tmp /foo > /dev/null 2> &1
속기
이는 오류를 stdout 또는 단말기에 전달하는 것과 같습니다.
그은것,cmd명령이 아닙니다.
$cmd 2>filename
cat filename
command not found
오류는 다음과 같이 파일로 전송됩니다.
2>&1
표준 오류가 단말기로 전송됩니다.
입력의 경우 0, stdout의 경우 1, stderr의 경우 2입니다.
한 가지 팁:somecmd >1.txt 2>&1 맞는말만지이,만▁is지.somecmd 2>&1 >1.txt전혀 효과가 없는 완전히 잘못된 것입니다!
당신은 이것을 파이프의 관점에서 이해할 필요가 있습니다.
$ (whoami;ZZZ) 2>&1 | cat
logan
ZZZ: command not found
보다시피 파이프의 LHS의 stdout과 stderr는 모두 RHS(파이프의 RHS)로 공급됩니다.
이는 다음과 같습니다.
$ (whoami;ZZZ) |& cat
logan
ZZZ: command not found
:1>&2와 함께 사용할 수 없습니다.2>&1.
명령이 파이프에 따라 달라진다고 가정해 보십시오. 예:
docker logs 1b3e97c49e39 2>&1 | grep "some log"
그랩핑은 두 가지 모두에서 발생할 것입니다.stderr그리고.stdout 이래stderr으로 기적으에병다니로 통합됩니다.stdout.
하지만 시도하는 경우:
docker logs 1b3e97c49e39 1>&2 | grep "some log",
을 통해 하고 있기 곳도 입니다.stdout | stdin,그리고.stdout두 번째 경우에는 로 리디렉션되었습니다.stderr유닉스 파이프는 관심이 없습니다.
언급URL : https://stackoverflow.com/questions/818255/what-does-21-mean
'programing' 카테고리의 다른 글
| python datetime.datetime을 일련 번호를 Excel로 변환하는 방법 (0) | 2023.05.27 |
|---|---|
| Windows용으로 좋은 grep 도구는 무엇입니까? (0) | 2023.05.27 |
| WPF 백그라운드 작업자 사용 방법 (0) | 2023.05.27 |
| Mongodb 통합 프레임워크:$group은 인덱스를 사용합니까? (0) | 2023.05.27 |
| 클래스 유형을 함수 매개 변수로 전달하는 방법 (0) | 2023.05.27 |






