bash에서.
사용해야 할 것을 결정하는 데 어려움이 있습니까?
모든 스크립트는 “>> / dev / stderr”를 사용합니다
bash 프롬프트에서, 내가 시도하면 :
echo test >>/dev/stderr
Works
echo test >> /dev/stderr
works
echo test >/dev/stderr
works
echo test > /dev/stderr
works
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/stderr
OS 별 처리 (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/stderr
ssh 이상 으로 오류가 표시 되면 서버 관리자가 해당 심볼릭 링크가 작동하지 못하게하는 몇 가지 보안 조치를 적용했을 수 있습니다. (예 : /proc
또는에 액세스 할 수 없습니다 /dev
). 모든 종류의 이상한 파손이 발생할 것으로 예상되지만 중복 파일 설명자 구문을 사용하는 것은 완벽하게 합리적이며 (아마도 더 효율적일 수 있습니다) 접근 방식입니다. 개인적으로 선호합니다.
답변
경로 재 지정 에 사용 하기위한 bash 구문&
이 single을 지정 >
하고 &
부호에 직접 인접해야 하기 때문에 실패 사례가 발생 합니다 .
[n]> & 단어
답변
사용 '>'
리디렉션 (존재하는 경우 자릅니다) 또는 '>>'
(존재하는 경우에 추가).
사용하여 '>&'
동일한 파일에 표준 출력 및 표준 오류를 원하는 경우, 당신은 파일로 리디렉션, 예를 들어, 스트림을 중복 '> output.log'
도 및 오류와'2>&'
myjob.sh > output.log 2>&