2014-02-16 3 views
1

이 명령을 실행할 때 (여기서 fail.cpp는 컴파일러 오류로 채워진 간단한 프로그램 임) 오류는 화면에 직접 출력되지 않고 오히려 fail.out 파일에서 출력됩니다. bash는 내 소개 이해에서bash : 리디렉션 출력과의 혼동

g++ fail.cpp > fail.out 2>&1 

, 이것은 의미한다 : 2>&1는 표준 출력이 새로운 장소에 (일명 2) 표준 오류 리디렉션 동안, >이 (일명, 1 표준 출력) 프로그램 출력을 리디렉션이 fail.out 할 파일입니다. (?) :

g++ fail.cpp 2>&1 > fail.out 

지금, 오류 메시지가 화면에 직접 가서 fail.out 빈 파일입니다

그러나 명령의 순서를 변경가 만드는 상황이 다르게 발생합니다.

왜 이런가요? 위의 명령과 같은 생각입니다.이 명령이 생성하는 오류를 stdout (2>&1)으로 리디렉션하고 fail.out 파일로 다시 리디렉션합니다. 그것은 내가 누락 된 작전의 명령인가?

+0

[리디렉션] (http://en.wikipedia.org/wiki/Redirection_%28computing%29) – devnull

+0

[bash 매뉴얼] (http://www.gnu.org/software/)의 좋은 설명 bash/manual/html_node/Redirections.html). –

답변

7

2>&1은 "stdout이 현재 연결되어있는 stderr로 리다이렉션"을 의미하며 리디렉션은 왼쪽에서 오른쪽 순으로 처리됩니다. 따라서 첫 번째 작업은 다음을 수행합니다.

  1. stutout을 fail.out 파일로 리디렉션합니다. 표준 출력의 현재 연결
  2. 리디렉션 열려진, 즉 fail.out 파일 두번째가 수행

: 표준 출력의 현재 연결

  1. 리디렉션 열려진, 즉 단말.
  2. stdout을 fail.out 파일로 리디렉션하십시오.
+0

그럼 확실하게'> '는'> & 1'과 같은 의미입니까? – nicole

+0

아니요,'filename>은'filename' (으)로 리디렉션됩니다. '> & 1'은'stdout'이 현재 연결되어있는 곳으로 리다이렉트하는 것을 의미합니다. – Barmar

+0

아. 아마도 ">'는'&'>와 같은 것을 의미할까요? – nicole

관련 문제