2014-12-03 1 views
1

나는 대답을 찾다가 아직 찾을 수 없다. 내 질문은 위의 명령 구문입니다.디렉토리가 2> & 1 앞에 있지만 2> /? 뒤에 오는 이유는 무엇입니까?

왜 내가 전에 하나의 디렉토리를 넣어야합니까? 예 : 나는

2>&1~/Desktop/log 

또는

2>&1>~/Desktop/log 

을하려고 할 때

>~/Desktop/log 2>&1 

2>~/Desktop/log 

그들은 내가와 OK입니다, 이는 작동하지 않기 때문에. 괜찮아. 왜 구문이 외관상으로 모순 된 이유인지 알고 싶습니다.

+0

이 질문은 http://unix.stackexchange.com/에서 질문해야한다고 생각합니다. –

+2

리디렉션은 명령의 전후에 수행 할 수 있습니다. –

+0

'> & 2 echo foo'는 표준 오류에 계속 쓰게됩니다. – chepner

답변

3

문제는 줄 간격과 줄의 의미를 나타냅니다.

>~/Desktop/log 2>&1 표준 출력 (파일 기술자 1 &1)로 표준 오차 2> 리디렉션 다음 ~/Desktop/log 표준 출력 > 리디렉션 수단.

2>~/Desktop/log 마찬가지로 표준 오류 2>에서 ~/Desktop/log으로 리디렉션됩니다.

그 말은 2>&1~/Desktop/log이 무엇을 의미하는지 명확하지 않으므로 혼란 스럽습니다 (모호합니다).

출력을 쓰기위한 유효한 대상이 아닌 디렉토리로 출력을 리디렉션 할 수도 없습니다.

라인의 리디렉션 순서는 왼쪽에서 오른쪽 방향으로 발생한다는 점에서 중요합니다. 따라서 >file 2>&1은 표준 출력과 표준 오류를 모두 파일로 리디렉션하지만 2>&1 >file은 표준 출력을 표준 출력으로 바꾸고 은 표준 출력을 다른 곳으로 리디렉션합니다 (표준 오류는 이전 위치로 이동).

2

내가하려고하면 :

: 2>&1/dev/null 

은 내가 '모호한 리디렉션'오류 수 (배쉬 4.3.28에서을 - 일부 사용자 지정 패치). 내가 사용하는 경우

는 :

: 2>&1 /dev/null 

를 공백으로, 다음 /dev/null는 (그게 다야, 그것은 테스트를위한 편리한 어떤 조합 — 없습니다있는) 단순히 : 명령에 대한 인수입니다. I/O 리디렉션은 : 명령이 실행되는 동안 표준 오류를 표준 출력으로 보냅니다.

으로 :

: 2>&1>/dev/null 

쉘은 whinge하지 않습니다. 그것은 2>&1을 하나의 리디렉션으로 처리하고 >/dev/null을 다른 것으로 처리하여 수명을 늘립니다.

표기법은 :

: 2>/dev/null 
: 2> /dev/null 

모두 표준 오류가 /dev/null로 이동하도록 지정.

이야기의 주요 도덕 : I/O 리디렉션이 서로 분리되어 있어야합니다. 공백은 싸고 모호함을 피하고 다른 사람 (6 개월 이내에 자신을 포함하여)이 읽고 이해하는 것을 더 쉽게하기 위해 사용해야합니다.

+0

'2> & 1>/dev/null'에 대한 좋은 지적은 불평하지 않습니다. 나는 그것을 시험하지 않았다 나는 방공호가 맞았다 고 그냥 가정했다. –

관련 문제