&>> &와 2> & 1의 리디렉션 차이


12

이 SO 스레드 와 몇 가지 다른 스레드 나는 재 지정에 대해 다음 명령을 보았다 stdoutstderr파일에.

그것들은 모두 동등합니까? 그들 사이에 차이점이 있습니까?

command1 >> logfile 2>&1
command &> logfile
command >& logfile

1
마지막 두 equivilent 있습니다 stackoverflow.com/q/11255447/1032785
jordanm

답변:


7

태그를 지정 zsh했으므로 3 가지 리디렉션이 모두 동일하게 작동한다고 알려 드리겠습니다. 당신이 모두 중복 게시물 (댓글에 하나 게시물의 하나)에서 읽을 수도, 그들은 모든 리디렉션 stderrstdout있는 어떤 inturn 파일 '로그 파일'로 리디렉션됩니다 (즉, 로그 파일은 출력과 오류를 모두 포함합니다 ).

그러나 그들의 행동은 당신이 속한 껍질에 따라 많은 것을 바꿉니다.

세 가지 스타일의 리디렉션은 모두 동일한 방식으로 작동 bash하며zsh

그러나:

또는 에서만 >&작동cshtcsh

[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 ~]$

에서 ksh2>&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. >&방금 오류가 발생한 동안 &>백그라운드에서 명령의 일부를 사용하고 로그 파일을 비 웁니다 (비어 있지 않은 경우).


1
무슨 소리 야 sh? 그것의 POSIX 쉘 경우, &>>&작동하지 않습니다.
cuonglm

안타깝게도 첫 번째 진술은 사실 틀렸다. clobber 대 append에 대한 내 대답을 참조하십시오.
Tom Hale

1

&>>&세미 당량 (소지품)

zsh수동 리디렉션 섹션은 말한다 :

  • &>
  • >&

동일합니다.

> fileSTDIN 전용의 경우 와 같이 둘 다 파일을 클로버합니다. 파일을 쓰기 전에 파일을 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&>>>>&양식을 모두 허용합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.