유닉스 셸 '의 경우' 를 '와' I want to 합칩니다 표준에러출력 stdout 추가로 조작, 내가 할 수 있는 '다음' stdout 스트리밍합니다 덮어쓰기/추가 및끝 내 명령:
2>&1
따라서 '헤드' 의 'I want to use 출력입니다 g++, 내가 할 수 있는' 이 같은 일이.
g++ lots_of_errors 2>&1 | head
그래서 처음 몇 오류뿐만 만 볼 수 있다.
난 항상 문제가 있을 수 없는 것인데, 이를 기억하는 나는 항상 내가 찾으러 가다 don& 구문, t # 39 이 특정 트릭 완전히 이해할 수 있기 때문으로 풀이된다.
수 문자 단위로, 1 위, 문자, 누군가가 이 분할합니다 설명하란말야 뭐라구오 2> & 고말은? '
파일 설명자 1 은 표준 출력 ('stdout') .< br>; 파일 설명자 2 는 표준 오류 ('표준에러출력').
다음은 기억할 수 있는 방법 중 하나는 이 chunghwa (완전히 정확한 것은 아니지만): 처음에는 2> 1 ',', '좋은 방법' 을 '' stdout 표준에러출력 리디렉션하십시오 같을 수 있습니다. 하지만, 실제로 '을', '라는 이름의 파일을 1'" 표준에러출력 리디렉션하십시오 " 해석될 수밖에 없다. ',' 가 아닌 어떤 파일 설명자에 파일_이름 inet6.0 & 나타냅니다. 따라서 chunghwa 됩니다. ',' 2> &, 1.
echo test > afile.txt
stdout 아피레스테스트 리디렉션합니다 '수'. 이 같은 일을 하고 있다.
echo test 1> afile.txt
리디렉션하지 표준에러출력, 그래요.
echo test 2> afile.txt
',' 은 구문을 >, & stdin, stdout, 다른 파일 스트리밍합니다 리디렉션할 설명자에 0 은 1 과 2 는 표준에러출력.
리디렉션할 stdout 수행여 표준에러출력 할 수 있습니다.
echo test 1>&2 # or echo test >&2
아카이브하거나:
echo test 2>&1
따라서 파선-짧은. 2> ',' 1 ',' & 표준에러출력 리디렉션합니다 충족되었으며 (미지정을) 파일 추가, 리디렉션합니다 표준에러출력 stdout 로.
<! - 모든 언어: > 랑 없음 -;
이에 대해 일부 구문 상세 중요한 행동을 할 수 있다. '약', ',' 는 몇 가지 작은 샘플링합니다 리디렉션, STDOUT 그리고 STDERR 오더할 인수만 .
, 리디렉션을 '기호' > 짓궂군요.
'-' , 덮어쓰므로 완료됨으로 파일 보내기 > 짓궂군요 전체적으로 존재할 경우 (http://otl. '나중에' bash 피쳐보다 dell. # 3 노클로버) 대상. '-' , 다시그것들을 덮어쓰기/추가 타겟으로의 외에도, > > 짓궂군요 보낼 경우 존재합니다.
어떤 경우 파일 약간만이라도 생성되는가 슬래시나 존재하지 않습니다.
이 테스트를 위해 우리가 할 수 있는 간단한 명령을 양쪽 출력입니다 뭔가 보낼 예정이다.
$ 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
(Expecting you don& # 39 라는 디렉터리입니다 티엔티 (tnt) ',' / 물론 없다.). 그럼 우리 할꺼이나!!
따라서 let& # 39 의 지켜보리니:
$ 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
마지막 명령행을 덤프합니다 콘솔이군요, 정보기술 (it) '을 하지 않을 것으로 보인다' 표준에러출력 수 있을 것으로 기대하고 있다. 하지만.
, 게시물로의 필터링부터 하려면 약 1 출력입니다 다른 일부 또는 모두:
$ 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 --->
이 절에 있는 것을 볼 수 있는 마지막 명령행을 정확히 동일한 이전 단락 , 어디서 작성했습니까 포지셔닝합니다 걱정했던것 작동을 하지 않을 것으로 보인다 (따라서, 이 될 수도 있습니다 걱정했던것 있다).
그래, 뭐 좀 리디렉션 os*용 대한 요령
$ ( 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' 설명자 & 발생할 수 있기 때문에, 스스로 '), 2, & 9>'.
$ 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
$ 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
여기서 '', '다른' 를 통해 특정 필터링합니다 검색하기를 STDOUT 그리고 STDERR 모두 3 명령을 통해 출력입니다 검색하기를 병합되었습니다 필터링합니다.
O 노클로버 지시할 수 없는 동안 '세트', '문법' > 기존 파일, 배시 덮어씁니다 이 제한은라이센스 통과할 수 있습니다.
$ 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
&Gt 통과 (를) ',':
$ 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
, 모두 우리가 지켜보리니 출력입니다 리디렉션하기 위해 주어진 명령을 할 수 있는 권리가 구문을 다음과 같이 쓸 수 있다.
$ ls -ld /tmp /tnt >/dev/null 2>&1
이 경우 특별한 는 짧은보기 문법: > &, ','. '또는' > &;
$ ls -ld /tmp /tnt &>/dev/null
$ ls -ld /tmp /tnt >&/dev/null
노타: , , '2> & 경우, 1, 2 는' ',' 타임코드가 1> & 올바른 문법 너무:
$ ls -ld /tmp /tnt 2>/dev/null 1>&2
$ 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/
섬세한 수작업식 누르면 읽을 수 있습니다.
man -Len -Pless\ +/^REDIRECTION bash
[태그: bash] 에서 콘솔이군요; -)
이 찬란한 포스트에 리디렉션을 찾았다. All about 리디렉션
>. $ 명령 파일에 > &;
이 한 줄 광고문 soundmixer. ',' > &, stdout 그리고 stderr 스트리밍합니다 - 이르기까지 모두 리디렉션하지 연산자입니다 출력입니다 명령을 절실해졌습니다. 이는 모두 동일한 리디렉션하는 Bash& # 39 의 짧은보기 신속하게 스트리밍합니다 고르십시오.
이것은 파일 서술자 테이블 Bash) 는 모두 같은 모양이 어떻게 후 리디렉션된 스트리밍합니다:
이제 모두 볼 수 있듯이, stdout 그리고 stderr 가리키십시오 'file' 입니다. 아무 것도 얻을 수 있어 기록되었으므로 stdout 그리고 stderr 에 기록된 'file' 입니다.
여러 가지 방법으로 스트리밍합니다 리디렉션하지 모두 동일한 고르십시오. 각 줄줄이 스트리밍합니다 리디렉션할 수 있습니다.
>. $ 명령을 2> & >, 파일, 1.
이는 모두 파일로 스트리밍합니다 리디렉션하지 훨씬 더 일반적인 방법입니다. 첫 번째 stdout 그리고 stderr 로 리디렉션됩니다 파일이므로 동일합니까 stdout 이 중복됨 할 수 있다. 따라서 다니엘을 스트리밍합니다 가리키는 'file' 입니다.
배시 (bash 볼 때 여러 it 프로세스 리디렉션 그들을 왼쪽에서 오른쪽으로. # 39 의 단계를 거칠 let& 어떻게 볼 수 있는 일이 발생한다. # 39 의 명령 실행하기 전에 Bash& 파일 서술자 테이블 다음과 같습니다.
이제 첫 번째 리디렉션을 Bash 프로세스활용 >, 파일. 따라서 이 we& # 39, ve seen before and stdout 가리키십시오 파일:
배시 (bash 2> 보고, 다음 두 번째 리디렉션을 &, 1. 우리는 # 39, t 본 리디렉션을 haven& 합니다. 이 번호요 중복 파일을 파일 1 과 we get to be a 복제본입니다 설명자 설명자 2:
지금까지 모두 스트리밍합니다 이동완료 절실해졌습니다.
그러나 여기서 조심해! 먹어서나
>. 명령을 2> & >, 파일, 1.
동일합니까 먹어서나 아니다.
>. $ 명령을 2> & >, 파일, 1.
중요한 순서를 리디렉션합니다 bash! 이 명령은 미디어만을 리디렉션합니다 표준 출력 절실해졌습니다. 이 표준에러출력 계속 인쇄하십시오 단말기. # 39, 그렇게 되면 다시 단계를 거칠 let& 납득할 수 없다. 그래서 명령을 실행하기 전에 파일 서술자 테이블 다음과 같습니다.
이제 Bash 프로세스뿐 리디렉션 왼쪽에서 오른쪽으로. 처음 볼 수 있도록 표준에러출력 중복 & 2>, stdout, 1. 파일 서술자 테이블 됩니다.
지금 보고 있는데, stdout, 파일 ',' 두 번째 리디렉션할 배시 > 리디렉션합니다 파일:
우리한테 무슨 일이 일어나고 있는지 여기서요? 그러나 여전히 방향점 stdout 이제 방향점 파일로 표준에러출력 단말기! 모든 것을 얻을 수 있는 질문을 되돌려줍니다 아웃하려면 인쇄했습니다 기록되었으므로 표준에러출력 여전히 화면! 그래서 매우, 매우 조심스럽게 순서를 통해 리디렉션합니다!
또한 bash, 먹어서나
>. $ 명령 파일에 > &;
것과 동일한 구조로 되어 있다.
>. $ 명령 파일에 & >;
파일 설명자 (fd) 이 번호 () 는 다음과 같은 뜻이 있다.
fd 2 대 1, 1 ',' 2> & 리디렉션합니다.
이 방법은 모든 파일 설명자의 수를 만약 프로그램이 활용한다.
'' /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 # 39, t 그것을 볼 수 있기 때문에 사용자 정의 로깅하기 비표준 don& 리디렉션할 않으면 redhat. 파일 또는 무언가.
Chunghwa report. 스트리밍합니다 있는 표준 오류 ('표준에러출력') 를 표준 출력 ('stdout') - 현재 위치를 통화화 의해 방치돼 다른 것으로 이 문제를 해결해 드리겠습니다.
하지만 이 방법을 사용하여 처리할 수 있는 다른 모든 출력입니다 리디렉션하십시오 it& # 39 의 가장 자주 사용되는 '채널', '와' 표준에러출력 스트리밍합니다 stdout 하나의 스트림으로 처리할 수 있습니다.
예를 들면 다음과 같습니다.
# 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
단, 그 마지막 '이 아니라' - ' one 은 표준에러출력' 을 직접 outfile2 리디렉션합니다 迈向 뭐라구오 stdout 인수 때 발생한 '는' 다음 '에서' ('outfile1') 와 리디렉션합니다 stdout outfile2 '.
따라서 일부 아주 정교한 속임수.
'1' 은 2>, &, POSIX 쉘로 chunghwa. 이것은, 토큰 (token) 에서 알 수 있습니다.
& >, ',': [ 복제본임을 출력 파일 설명자 ] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html # tag_18_07_06) 연산자 ([ 출력입니다 리디렉션을 ] 의 변형 (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html # tag_18_07_02) > 작동자 ','). [X], [y] 때 ',', 'x 파일 설명자를 > & 의해' 로 복제본이므로 출력 파일 설명자를 'y' 할 수 있게 됩니다.
, 표준 output*&quo " '1'. 출력 파일 설명자를.
'1', '1' 을, 파일 설명자를 복제본에 표현식에서는 2> & 위치 때문에 모든 출력입니다 '2' 에 기록된 '2' (", 표준 error") 당초 이 같은 파일 실행 환경 마이그레이션된 설명자 '1' (", 표준 output").
자세한 설명:
[ 파일 설명자 ] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html # tag_03_166): " 매핑되며, 프로세스를 식별하는 데 사용되는 파일 열기 위한 목적으로 한 음이 아닌 정수, 고유 파일 access.".
>. 열려 있는 파일을 소수 대표되는 시작으로 제로. 가능한 가장 큰 값이 구현 정의된. 그러나 모든 구현을 불지옥으 지원부에서는 포함), 응용 프로그램에서 사용할 수 있도록 최소 0 에서 9. 이 수치는 호출됨 ", 파일 descriptors". 값은 0, 1, 2 개 특별한 의미를 가지고 있으며, 특정 리디렉션을 및 재래식 /dev/raw/raw1 의해 함축된 운영체. 이들은 각각 표준 입력, 표준 출력 및 표준 오류) 로 불린다. 일반적으로 그들의 표준 입력으로부터 표준 입력, 출력 및 쓰기 프로그래밍합니다 시행하십시오 출력입니다. 오류 메시지는 일반적으로 기록되었으므로 표준 오류. 최근 리디렉션을 선행되어야 할 수 있는 하나 이상의 숫자 (없이 < 개입하는 blank>; 수 문자) 를 designate 파일 설명자가 번호입니다.
2 는 콘솔 표준 오류.
1 은 콘솔입니다 표준 출력입니다.
또한, 이것은 표준 POSIX 유닉스 및 windo 다음과 같다.
E. g. 실행할 때
perl test.pl 2>&1
표준 오류: 이동완료 표준 출력, 모두 볼 수 있도록 출력입니다 동업이요:
perl test.pl > debug.log 2>&1
실행 후 모두 볼 수 있는 등 오류뿐만 데버고드로그리그스 출력물에는
perl test.pl 1>out.log 2>err.log
그럼 표준 출력 마이그레이션된 에르콜로고드 우스트로그, 표준 오류
나는 이러한 제안하세요 시도하시려면 이해할 수 있습니다.
당신의 질문에 대답할 수 있습니다. It takes 모든 오류 출력입니다 (일반적으로 보내 표준에러출력) 와 쓰기 迈向 표준 출력 (stdout).
기억하는 데 도움이 되는
" 2> & 1";;; 모든 것이 아닌 단순히 방향점 표준에러출력, stdout 로 보냈다.
난 또 추천합니까 판독값 [이 포스트에 error: 리디렉션하는] (http://www.cyberciti.biz/faq/redirecting-stderr-to-stdout/) 의 위치를 이 주제에 대해서는 전체 상세함을.
dup2(1, 2);
[맨페이지] 참조 (http://linux.die.net/man/2/dup2).
또한, '1' 은 a , 복제본에 & 2> 되는 이유를 설명한다.
command >file 2>&1
. 동일합니까 않습니다.
command 2>&1 >file
첫 번째 스트림을 보내는 반면, 두 번째 파일을 모두 stdout ',' '' 에 대한 오류, 일반 출력입니다 '' 파일을 보낼 예정이다.
단, foo '와' '에서' / / tmp 시스템에 존재하지 않습니다.
$ ls -l /tmp /foo
/ tmp '와' 는 인쇄 오류 메시지가 인쇄인쇄 콘텐트입니다 foo '대한' /
$ ls -l /tmp /foo > /dev/null
/ tmp '을' '내용을 보내드립니다 / dev / nulll' 와 '대한' /foo 인쇄 오류 메시지가
$ ls -l /tmp /foo 1> /dev/null
똑같은 일을 할 것이다 (참고합니다 1)
$ ls -l /tmp /foo 2> /dev/null
/ tmp '와' 는 '인쇄인쇄 콘텐트입니다 오류 메시지를 보내기 / dev / nulll'
$ ls -l /tmp /foo 1> /dev/null 2> /dev/null
모두 열거합니다 오류 메시지를 전달할 뿐만 아니라 'null' / dev /
$ ls -l /tmp /foo > /dev/null 2> &1
이 대표
1 ',' 에 대한 내 개인 연상기호 2> &, 작동자 로만스였나:
너무 자주 사용되는 다른 리디렉션을 연상기호 같은 작업을 위한 1> &, 2, ',':
그리고 항상 기억하십시오. # 39, & # 39 에서 end& 리디렉션 체인을 읽을 수 있습니다. (오른쪽에서 왼쪽으로) ( 필터링되지 왼쪽에서 오른쪽으로).
>. # 리디렉션하는 입력입니다 >. 이 파일 이름이 입력 리디렉션을 >. results from the word 파일을 읽기 위해 열 수 있는 확장 >. 만약 n 은 n 또는 설명자를 표준 입력 (파일 설명자 0) >. 지정되지 않았습니다. >. >. 일반 리디렉션하는 형식의 입력: >. >. [명사] <, word >. >. # 리디렉션하는 출력입니다 >. 그 결과 출력 리디렉션을 파일 >. 이름을 쓰기 위해 results from the word 열 수 있는 확장 >. 파일 설명자 n, 또는 표준 출력 (파일 설명자 1) n 경우 >. 지정되어 있지 않습니다. 만든 파일이 없는 경우. 이 경우 >. 가 있을 수 없는 것은 크기 때문에 일어난다. >. >. 일반적인 형식의 리디렉션하는 출력은 다음과 같습니다. >. >. [명사] >, word >. >. >. # 동영상 파일 설명자 >. 이 리디렉션을 운영자, >. >. [명사] < & 자리 -;; >. >. 파일 설명자 자리 설명자 ᄂ씨 또는 파일 이동 >. 표준 입력 (파일 설명자 0) 를 n 지정되어 있지 않습니다. >. 자리 닫힐 받은후 중복됨 n. >. >. 마찬가지로, 리디렉션을 작동자 >. >. [명사] > & 자리 -;; >. >. 파일 설명자 자리 설명자 ᄂ씨 또는 파일 이동 >. 지정되지 않은 경우 표준 출력 (파일 설명자 1) n.
man bash
유형 '/' 를 ',' 더 섹선에서 학습하십시오 리디렉션을 ^ 리디렉션할 찾을 수 있습니다.
한 온라인 버전이 있습니다. [3.6tb 리디렉션] [1]
많은 시간, '남자' 가 강력한 툴을 linux*용 익힐 수 있습니다.
[1]: http://www.gnu.org/software/bash/manual/bashref.html # 리디렉션