에 이 SO 스레드 와 몇 가지 다른 스레드 나는 재 지정에 대해 다음 명령을 보았다 stdout
및 stderr
파일에.
그것들은 모두 동등합니까? 그들 사이에 차이점이 있습니까?
command1 >> logfile 2>&1
command &> logfile
command >& logfile
에 이 SO 스레드 와 몇 가지 다른 스레드 나는 재 지정에 대해 다음 명령을 보았다 stdout
및 stderr
파일에.
그것들은 모두 동등합니까? 그들 사이에 차이점이 있습니까?
command1 >> logfile 2>&1
command &> logfile
command >& logfile
답변:
태그를 지정 zsh
했으므로 3 가지 리디렉션이 모두 동일하게 작동한다고 알려 드리겠습니다. 당신이 모두 중복 게시물 (댓글에 하나 게시물의 하나)에서 읽을 수도, 그들은 모든 리디렉션 stderr
에 stdout
있는 어떤 inturn 파일 '로그 파일'로 리디렉션됩니다 (즉, 로그 파일은 출력과 오류를 모두 포함합니다 ).
그러나 그들의 행동은 당신이 속한 껍질에 따라 많은 것을 바꿉니다.
세 가지 스타일의 리디렉션은 모두 동일한 방식으로 작동 bash
하며zsh
그러나:
또는 에서만 >&
작동csh
tcsh
[soum@server ~]$ ./test.sh > logfile 2>&1
Ambiguous output redirect.
[soum@server ~]$ ./test.sh &> logfile
Invalid null command.
[soum@server ~]$ ./test.sh >& logfile
[soum@server ~]$ echo $SHELL
/bin/tcsh
[soum@server ~]$
에서 ksh
만 2>&1
작동합니다.
$ ./test.sh >& logfile
-ksh: logfile: bad file unit number
$ ./test.sh &> logfile
[1] 23039
$ 1 2 3 4 5 6 logfile test.sh
ls: cannot access ttr: No such file or directory
[1] + Done(2) ./test.sh &> logfile
나는 싫어 ksh
. >&
방금 오류가 발생한 동안 &>
백그라운드에서 명령의 일부를 사용하고 로그 파일을 비 웁니다 (비어 있지 않은 경우).
sh
? 그것의 POSIX 쉘 경우, &>
및 >&
작동하지 않습니다.
&>
및 >&
세미 당량 (소지품)zsh
수동 리디렉션 섹션은 말한다 :
&>
>&
동일합니다.
> file
STDIN 전용의 경우 와 같이 둘 다 파일을 클로버합니다. 파일을 쓰기 전에 파일을 0 바이트로 자릅니다 .
그러나 의 bash
수동 리디렉션 섹션 이 추가한다 :
두 가지 형태 중 첫 번째 형태가 선호됩니다. 이것은 의미 적으로
>word 2>&1
두 번째 양식을 사용할 때 단어 가 숫자 또는으로 확장되지 않을 수 있습니다
-
. 그렇다면 호환성 문제로 인해 다른 리디렉션 연산자가 적용됩니다 (아래 파일 설명자 복제 참조).
따라서 태그를 지정하는 동안 스크립트를 zsh
작성해야 할 경우 첫 번째 형태로 손가락 메모리를 얻는 것이 좋습니다 bash
.
>> logfile 2>&1
그리고 &>>
등가 (추가)여기서는 logfile
덮어 쓰지 않지만 파일 끝에 쓰기 위해 열기 위해 추가합니다 (예 : 추가 모드 ( O_APPEND
)).
둘 다에 해당합니다 {ba,z}sh
.
command1 &>> logfile
에서 bash
:
표준 출력 및 표준 오류를 추가하는 형식은 다음과 같습니다.
&>>word
이것은 의미 적으로
>>word 2>&1
(아래의 파일 디스크립터 복제 참조).
(참고 : 에 추가 할 수있는 방법은 하나뿐이므로 위 섹션에서 &>
오버 버퍼를 >&
다시 사용하는 것이 좋습니다 bash
.)
zsh
&>>
와 >>&
양식을 모두 허용합니다 .