리 눅 스 셸 의 '2 > & 1' 을 어떻게 이해 합 니까?

머리말
때때로 우 리 는 이러한 스 크 립 트 호출 을 자주 볼 수 있다.
./test.sh  > log.txt 2>&1

여기 2 > & 1 이 무슨 뜻 이에 요?어떻게 이해 해 야 합 니까?먼저 결론: 위의 호출 은.../test. sh 의 출력 을 log. txt 파일 로 재 설정 하 는 동시에 표준 오류 도 log. txt 파일 로 재 설정 하 는 것 을 나타 낸다.
무슨 묘용 이 있 는가
(어떤 역할 인지 알 았 다 면 이 소절 을 뛰 어 넘 을 수 있다) 위 에 무슨 뜻 이 있 을 까?스 크 립 트 test. sh 가 있다 면 다음 예 를 살 펴 보 겠 습 니 다.
#!/bin/bash
date         #      
while true   #   
do
    #  2     
    sleep 2
    whatthis    #      
    echo -e "std output"
done

스 크 립 트 에서 현재 날 짜 를 인쇄 한 다음 2 초 간격 으로 whatthis 를 실행 하고 문 자 를 인쇄 합 니 다.시스템 에 whatthis 명령 이 존재 하지 않 기 때문에 실행 이 잘못 될 수 있 습 니 다.이 스 크 립 트 의 인쇄 결 과 를 저장 하려 면 test. sh 결 과 를 log. txt 로 바 꾸 면 됩 니 다.
./test.sh > log.txt

실행 결 과 는 다음 과 같 습 니 다.
ubuntu$ ./test.sh >log.txt
./test.sh:   7: whatthis:      

우 리 는 분명히 인쇄 내용 을 log. txt 로 재 설정 하 였 으 나, 이 잘못된 정 보 는 log. txt 로 재 설정 하지 않 았 다.프로그램 을 사용 하여 이 스 크 립 트 를 호출 하면 스 크 립 트 로 그 를 볼 때 이 오류 정 보 를 전혀 볼 수 없습니다.다음 방식 을 사용 하면 오류 정 보 를 log. txt 로 다시 설정 합 니 다.
./test.sh  > log.txt 2>&1

이러한 방식 으로 스 크 립 트 를 호출 하면 잘못된 정 보 를 잘 저장 하여 문 제 를 찾 는 데 도움 을 줄 수 있 습 니 다.
어떻게 이해 합 니까?
모든 프로그램 이 실 행 된 후에 적어도 세 개의 파일 설명 자 를 엽 니 다. 각각 0: 표준 입력 입 니 다.1: 표준 출력;2: 표준 오류.예 를 들 어 앞의 test. sh 스 크 립 트 에 대해 우 리 는 아래 절 차 를 통 해 적어도 세 개의 파일 설명 자 를 열 었 다.
./test.sh    #    
ps -ef|grep test.sh  #        ,  ps    test.sh pid
hyb       5270  4514  0 19:20 pts/7    00:00:00 /bin/bash ./test.sh
hyb       5315  5282  0 19:20 pts/11   00:00:00 grep --color=auto test.sh

test. sh 의 pid 5270 을 볼 수 있 습 니 다. 관련 fd 디 렉 터 리 에 들 어 갑 니 다:
cd /proc/5270/fd   #  5270               
ls -l              #        
 0 -> /dev/pts/7
 1 -> /dev/pts/7
 2 -> /dev/pts/7
 255 -> /home/hyb/workspaces/shell/test.sh

test. sh 가 0, 1, 2 세 개의 파일 설명 자 를 열 었 습 니 다.마찬가지 로 관심 이 있 으 면 다른 실행 프로 세 스 의 파일 설명자 가 열 린 상황 도 볼 수 있 습 니 다. 닫 히 지 않 으 면 이 세 개의 파일 설명자 가 있 습 니 다.
그러면 이 제 는 앞의 의문 을 쉽게 이해 할 수 있 습 니 다. 2 > & 1 은 파일 설명 2 (표준 오류 출력) 의 내용 을 파일 설명자 1 (표준 출력) 로 바 꾸 는 것 을 나타 내 는데 왜 1 앞 에 & 가 필요 합 니까?& 가 없 을 때 1 은 일반적인 파일 로 여 겨 집 니 다. & 방향 을 바 꾸 는 목 표 는 파일 이 아니 라 파일 설명자 입 니 다.앞에서 알 았 듯 이 test. sh > log. txt 는 파일 설명자 1 의 내용 을 파일 log. txt 로 재 설정 하면 최종 표준 오류 도 log. txt 로 재 설정 합 니 다.저 희 는 똑 같이 앞의 방법 을 통 해 test. sh 프로 세 스 의 파일 설명자 상황 을 다음 과 같이 볼 수 있 습 니 다.
 0 -> /dev/pts/7
 1 -> /home/hyb/workspaces/shell/log.txt
 2 -> /home/hyb/workspaces/shell/log.txt
 255 -> /home/hyb/workspaces/shell/test.sh

파일 설명자 1 과 2 가 모두 log. txt 파일 을 가리 키 는 것 을 뚜렷하게 볼 수 있 고 우리 가 최종 적 으로 원 하 는 효 과 를 얻 을 수 있 습 니 다. 표준 오류 출력 을 파일 로 다시 설정 합 니 다.그것들 은 또 두 가지 등가 표기 법 이 있다.
./test.sh  >& log.txt
./test.sh  &> log.txt

총결산
우 리 는 앞의 내용 을 정리 합 시다.
  • 프로그램 이 실 행 된 후에 세 개의 파일 설명 자 를 엽 니 다. 각각 표준 입력, 표준 출력 과 표준 오류 출력 입 니 다.
  • 스 크 립 트 를 호출 할 때 2 > & 1 을 사용 하여 표준 오류 출력 을 다시 설정 할 수 있 습 니 다.
  • 스 크 립 트 의 오 류 를 보기 만 하면 표준 출력 을 파일 로 바 꿀 수 있 고 표준 오 류 는 콘 솔 에 인쇄 되 어 보기 편 합 니 다.
  • >> log. txt 는 내용 을 log. txt 파일 끝 에 추가 합 니 다.
  • 프로 세 스 id/fd 의 내용 을 보면 프로 세 스 가 열 린 파일 설명자 정 보 를 알 수 있 습 니 다.
  • 좋은 웹페이지 즐겨찾기