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

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

존재하다이 스레드stdout그리고 다른 스레드에서는 리디렉션 및 stderr파일에 대한 다음 명령을 보았습니다 .

그것들은 모두 동등합니까? 그들 사이에 어떤 차이가 있나요?

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

답변1

이제 태그를 지정했으므로 zsh3개의 리디렉션이 모두 정확히 동일한 방식으로 작동한다는 점을 알려드리겠습니다. 두 개의 중복된 게시물(댓글에 있는 게시물과 게시물에 있는 게시물)을 읽었을 수 있듯이 둘 다 "로그 파일" 파일로 리디렉션 stderr됩니다 stdout(즉, 로그 파일에는 출력과 오류가 포함됩니다). ).

그러나 해당 동작은 현재 사용 중인 셸에 따라 크게 달라집니다.

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

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. >&방금 오류가 발생했지만 명령 &>의 일부가 백그라운드에서 실행되어 로그 파일이 지워졌습니다(비어 있지 않은 경우).

답변2

&>>&준등가(클로버)

이것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

(아래 파일 설명자 복사 참조)

(참고: 추가 방법이 하나뿐이므로 위 섹션에서는 over를 사용하는 것이 다시 권장됩니다 &>.)>&bash

zsh&>>사용 및 형식 모두 >>&허용됩니다.

관련 정보