> &는 무엇을 의미합니까?


81

이 표현에 약간 혼란 스러웠습니다.

gcc -c -g program.c >& compiler.txt

&>filenamestdout과 stderr을 모두 file로 리디렉션한다는 것을 알고 있습니다 filename. 그러나이 경우 앰퍼샌드는보다 큼 기호 뒤에 있습니다. M>&N, where Mand Nare file descriptors 형식처럼 보입니다 .

위의 스 니펫에서 does M=1N='compiler.txt'? 이것이 정확히 어떻게 다른지 :

gcc -c -g program.c > compiler.txt     (ampersand removed)

내 이해는 각 열린 파일이 2보다 큰 파일 설명자와 연관되어 있다는 것입니다. 이것이 맞습니까?

그렇다면 파일 이름이 리디렉션 대상인 파일 설명자와 상호 교환 될 수 있습니까?

답변:


93

이것은 &>. bash 맨 페이지에서 :

표준 출력 및 표준 오류 리디렉션이 구조를 사용하면 표준 출력 (파일 설명자 1)과 표준 오류 출력 (파일 설명자 2) 모두 이름이 단어 확장 인 파일로 리디렉션 될 수 있습니다.

There are two formats for  redirecting  standard  output  and  standard
error:

       &>word
and
       >&word

Of the two forms, the first is preferred.  This is semantically equiva-
lent to

       >word 2>&1

7
나는 어리 석다. 나는 다른 소스를 읽는 데 많은 시간을 보냈고 맨 페이지에 바로 거기에 있었다.
contrapositive

3
>&csh 및 tcsh에서 stdout 및 stderr을 리디렉션하는 데 사용하는 구문입니다. 그것이 아마도 bash가 그것을 받아들이는 이유 일 것입니다.
Keith Thompson

4
이 것을 의미 하는가 &>word와는 >word 2>&1의미 적으로 동일하다? "This"의 선행은 분명하지 않습니다.
geneorama

8
@geneorama &>word, >word 2>&1, >&word 정확히 동일합니다.
jordanm

1
이제 나는 내가 다른 곳에서 읽은 것을 바탕으로 이전에 실수를했다는 것을 깨달았습니다. >표준 출력 만 리디렉션합니다. >오류를 리디렉션하지 않습니다. (아마 내 미래의 주석을 리디렉션합니다 /dev/null)
geneorama

8

&>vs >&: 선호하는 버전은 &>(clobber)

에 관해서:

  • &>
  • >&

둘 다 파일을 방해합니다 > file. STDIN 전용의 경우 처럼 파일을 쓰기 전에 0 바이트로 자릅니다 .

그러나bash수동 리디렉션 섹션 이 추가한다 :

두 가지 형태 중 첫 번째가 선호됩니다. 이것은 의미 적으로 다음과 같습니다.

>word 2>&1

두 번째 형식을 사용할 때 단어 는 숫자 또는 -. 그렇다면 호환성을 위해 다른 리디렉션 연산자가 적용됩니다 (아래의 파일 설명자 복제 참조).

(참고 : zsh모두 동일합니다 .)

다음 &>과 같은 이유로 첫 번째 ( ) 형식으로 손가락 메모리를 얻는 것이 좋습니다 .

지원 되지 않는 용도 &>>로 사용 (추가)>>&bash

추가 양식은 하나뿐입니다.

표준 출력 및 표준 오류를 추가하는 형식은 다음과 같습니다.

&>>word

이것은 의미 적으로 다음과 같습니다.

>>word 2>&1

(아래의 파일 설명자 복제 참조).

노트 :

  • 를 추가하는 방법이 한 가지뿐이므로 위 섹션에서 &>over >&를 사용하는 것이 좋습니다 bash.
  • zsh&>>>>&양식을 모두 허용합니다 .

이 답변은 찬성 답변보다 훨씬 더 유용합니다.
slayer

그래서 &쉘 인터프리터에 의해 1과 2로 변환되는 특수 문자가 있습니까?
Fakher Mokadem 2010 년

@FakherMokadem 아니요, 설명서를 참조하십시오 .
Tom Hale
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.