[unix] `>> / dev / stderr` (공백 포함)과`> & 2`의 차이점은 무엇입니까?

bash에서.

사용해야 할 것을 결정하는 데 어려움이 있습니까?

모든 스크립트는 “>> / dev / stderr”를 사용합니다

bash 프롬프트에서, 내가 시도하면 :
echo test >>/dev/stderrWorks
echo test >> /dev/stderrworks
echo test >/dev/stderrworks
echo test > /dev/stderrworks

echo test >>&2실패!
echo test >> &2실패!
echo test >&2작품
echo test > &2하지 못한!

모든 스크립트를로 변경하려고합니다 >&2.

또한 전혀 작동하지 않고 (권한 거부) ssh (after su SomeUser)에 큰 영향을 미치는 것으로 보입니다 .>>/dev/stderr>&2



답변

>& n파일 디스크립터직접 복제하는 쉘 구문 입니다. 파일 디스크립터 2는 stderr입니다. 그것이 그 작동 방식입니다. stderr뿐만 아니라 다른 파일 디스크립터도 복제 할 수 있습니다. 파일 디스크립터를 복제해도 stderr가 파일이더라도 파일이 잘리지 않고 >&하나의 토큰 이기 때문에 추가 모드를 사용할 수 없으므로 공간을 넣을 수는 없지만 >& 2작동합니다.

>> name다른 구문, 허용되는 name파일 이름입니다 (그리고 토큰입니다 >>). 이 경우 파일 이름을 사용하고 있습니다. /dev/stderrOS 별 처리 (Linux의 경우 심볼릭 링크 /proc/self/fd/2)는 표준 오류를 의미합니다. 추가 및 자르기 모드는 stderr이 터미널 일 때 동일한 작업을 수행합니다. 표준 오류가 파일 인 경우, 그러나, 그것은 것입니다 잘릴 수 :

anthony@Zia:~$ bash -c 'echo hi >/dev/stderr; echo bye >/dev/stderr' 2>/tmp/foo
anthony@Zia:~$ cat /tmp/foo
bye

/dev/stderrssh 이상 으로 오류가 표시 되면 서버 관리자가 해당 심볼릭 링크가 작동하지 못하게하는 몇 가지 보안 조치를 적용했을 수 있습니다. (예 : /proc또는에 액세스 할 수 없습니다 /dev). 모든 종류의 이상한 파손이 발생할 것으로 예상되지만 중복 파일 설명자 구문을 사용하는 것은 완벽하게 합리적이며 (아마도 더 효율적일 수 있습니다) 접근 방식입니다. 개인적으로 선호합니다.


답변

경로 재 지정 에 사용 하기위한 bash 구문& 이 single을 지정 >하고 &부호에 직접 인접해야 하기 때문에 실패 사례가 발생 합니다 .

[n]> & 단어


답변

사용 '>'리디렉션 (존재하는 경우 자릅니다) 또는 '>>'(존재하는 경우에 추가).

사용하여 '>&'동일한 파일에 표준 출력 및 표준 오류를 원하는 경우, 당신은 파일로 리디렉션, 예를 들어, 스트림을 중복 '> output.log'도 및 오류와'2>&'

myjob.sh > output.log 2>&


답변