셸 1>&2 2>&1&>filename 재 정립 의 의미 와 차이

3623 단어 방향 을 바꾸다
당초 셸 에 서 는'>&1'과'>&2'를 보고 무슨 뜻 인지 몰 랐 다.인터넷 검색 을 통 해 해 해 혹 될 수 있 었 다.사실 이것 은 두 가지 출력 이 었 다.
셸 프로그램 에서 가장 많이 사용 되 는 FD(file descriptor)는 대략 세 가지 가 있 는데 그것 이 바로 다음 과 같다.
0 은 표준 입력(stdin)을 나타 내 는 파일 설명자 입 니 다.
1.표준 출력(stdout)을 나타 내 는 파일 설명자 입 니 다.
2.표준 오류(stderr)를 나타 내 는 파일 설명자 입 니 다.
표준 상황 에서 이 FD 들 은 각각 다음 과 같은 장치 와 관련 이 있다.
stdin(0):키보드 입력 을 하고 전단 으로 되 돌려 줍 니 다.
stdout(1):monitor 의 정확 한 반환 값 을 전단 으로 출력 합 니 다.
stderr(2):Monitor 오류 반환 값 을 전단 으로 출력 합 니 다.
예 를 들 어 설명해 주세요.
현재 디 렉 터 리 에는 파일 a.txt 만 있 습 니 다.
[root@redhat box]# ls
a.txt
[root@redhat box]# ls a.txt b.txt
ls:b.txt:No such file or directory b.txt 라 는 파일 이 없 기 때문에 오류 값 을 되 돌려 줍 니 다.이것 이 바로 2 출력 입 니 다.
a.txt.이것 이 바로 1 출력 입 니 다.
그리고 이어서 보 세 요.
[root@redhat box]# ls a.txt b.txt 1>file.out 2>file.err
실행 후 되 돌아 오 는 값 이 없습니다.되 돌아 오 는 값 이 전단 에 표시 되 지 않 고 해당 파일 로 바 뀌 었 기 때 문 입 니 다.
[root@redhat box]# cat file.out
a.txt
[root@redhat box]# cat file.err
ls: b.txt: No such file or directory
일반적으로"1>"은">"로 생략 할 수 있다.
위의 명령 을 ls a.txt b.txt>file.out 2>file.err 로 쓸 수 있 습 니 다.
이런 인식 이 있어 야'1>&2'와'2>&1'을 이해 할 수 있다.
1>&2 정확 한 반환 값 은 2 출력 채널 에 전달&2 는 2 출력 채널 을 표시 합 니 다.
1>2 로 잘못 쓰 면 1 출력 을 파일 2 로 바 꾸 는 것 을 의미 합 니 다.
2>&1 오류 반환 값 을 1 출력 채널 에 전달 합 니 다.마찬가지 로&1 은 1 출력 채널 을 표시 합 니 다.
예 를 들다.
[root@redhat box]# ls a.txt b.txt 1>file.out 2>&1
[root@redhat box]# cat file.out
ls: b.txt: No such file or directory
a.txt
현재 올 바른 출력 과 잘못된 출력 은 file.out 파일 로 지정 되 어 있 으 며,전단 에 표시 되 지 않 습 니 다.
보충 적 으로 수출 은 1 과 2 뿐만 아니 라 다른 유형 도 있 는데 이 두 가 지 는 가장 자주 사용 되 고 기본 적 인 것 일 뿐이다.
 >리 셋 문자 입 니 다.바로 앞에서 출력 한 내용 을 뒤에 지정 한 위치 로 리 셋 하 는 것 입 니 다.예 를 들 어(예 1):

echo "    " > filename.txt
위의 예 는"일부 내용"을 filename.txt 파일 에 기록 합 니 다.
>앞 에는 어떤 내용 을 파일 로 재 설정 하 는 지 숫자 를 추가 할 수 있 습 니 다.기본 값 은 표준 출력 을 파일 로 재 설정 하 는 것 입 니 다.따라서 아래 의 이 예 는 위 에 있 는 것 과 같 습 니 다(예 2).

echo "    " 1> filename.txt
잘못된 정보 라면 filename.txt 로 출력 되 지 않 습 니 다(예 3):

$ ls nodir 1> filename.txt
$ ls: nodir: No such file or directory
위의 예 에서 nodir 가 존재 하지 않 기 때문에 ls 명령 을 통 해 조회 할 때 오류 정 보 는 2(stderr)로 출력 됩 니 다.그러나 우리 가 지정 한 것 은 1 을 filename.txt 로 바 꾸 는 것 입 니 다.따라서 위의 명령 이 실 행 된 후에 filename.txt 에는 내용 이 없습니다.그러나 다음 명령 을 실행 하면 잘못된 정 보 를 filename.txt 에 기록 합 니 다(예 4).

$ ls nodir 2> filename.txt
$ cat filename.txt
$ ls: nodir: No such file or directory
&설명자 입 니 다.1 또는 2 전에&를 추가 하지 않 으 면 일반 파일 로 여 겨 집 니 다.
1>&2 는 표준 출력 을 표준 오류 로 바 꾸 는 것 을 의미한다.
2>&1 은 표준 오류 출력 을 표준 출력 으로 바 꾸 는 것 을 의미한다.
&>filename 은 표준 출력 과 표준 오류 출력 을 파일 filename 으로 바 꾸 는 것 을 의미 합 니 다.
우 리 는 예 를 하나 더 보 자(열 5).

$ ls nodir 1> filename.txt 2>&1
$ cat filename.txt
$ ls: nodir: No such file or directory
위의 예 는 표준 출력 을 파일 filename.txt 로 재 설정 한 다음 표준 오 류 를 표준 출력 으로 재 설정 하기 때문에 마지막 오류 정보 도 표준 출력 을 통 해 파일 에 기록 되 었 습 니 다.비교 예 3,4,5 를 통 해 그 역할 을 알 수 있 습 니 다.
다음은 바 이 두 에서 알 게 된 내용 입 니 다.참고 하 시기 바 랍 니 다.
―리 눅 스 재 정립 중>&2 는 어떻게 이해 합 니까?
질문
답:
>&2 즉 1>&2 는 결 과 를 표준 오류 와 같이 출력 하 는 것 이다.이전에 정 의 된 표준 오류 가 특정한 log 파일 로 바 뀌 었 다 면 표준 출력 도 이 log 파일 로 바 뀌 었 습 니 다.
예 를 들 어 ls 2>a1>&2(같은 ls>a1 2>&1)
표준 출력 과 표준 오 류 를 a1 로 바 꾸 면 터미널 에서 정 보 를 볼 수 없습니다.

좋은 웹페이지 즐겨찾기