>&2와 &>2의 차이점은 무엇입니까 [중복]

>&2와 &>2의 차이점은 무엇입니까 [중복]

다음 사이에 차이점이 있는지 궁금합니다.

  echo "running the npm patch" >&2;

그리고

 echo "running the npm patch" &>2;

저는 실제로 이 구문을 전혀 이해하지 못했습니다.

답변1

설명서의 리디렉션 섹션을 주의 깊게 읽어보세요.https://www.gnu.org/software/bash/manual/bashref.html#Redirections


cmd >&2양식은 "3.6.8 파일 설명자 복사" 섹션에 설명되어 있습니다.

[n]>&word

여기서는 n지정되지 않았으므로 기본값은 stdout을 의미하는 "1"입니다. stdout을 stderr을 의미하는 파일 설명자 "2"로 리디렉션합니다. 명령의 모든 일반 출력은 stderr로 전송됩니다.


cmd &>2양식은 "3.6.4 표준 출력 및 표준 오류 리디렉션" 섹션에 설명되어 있습니다.

표준 출력과 표준 오류를 리디렉션하는 데는 두 가지 형식이 있습니다.

&>word

그리고

>&word

두 가지 형식 중 첫 번째 형식이 선호됩니다. 이는 의미상 다음과 동일합니다.

>word 2>&1

이 경우 "word"는 "2"이므로 명령의 stdout 및 stderr을 2.

$ sh -c 'echo stdout; echo stderr >&2' &>2
$ ls -l 2
-rw-rw-r-- 1 jackman jackman 14 May 14 21:40 2
$ cat 2
stdout
stderr

공부하면서 모든 것이 매우 혼란스럽다는 것을 알았습니다. 그것에 충실하십시오. 리디렉션은 엄격하게 왼쪽에서 오른쪽으로 수행된다는 점을 기억하세요. 예를 들어

$ sh -c 'echo stdout; echo stderr >&2' >&2 2>some.file
stdout
$ cat some.file
stderr

"stdout" 문자열이 파일로 전송되지 않는 이유는 무엇입니까?

왼쪽에서 오른쪽으로:

  • 1>&2-- 제 생각에는 "파일 설명자 1을 다음으로 리디렉션하는 것 같습니다."파일 설명자 2가 현재 사용하고 있는 것이 무엇이든 간에". 현재 fd 2는 /dev/stderr을 가리킵니다. 따라서 이제 fd 1도 /dev/stderr을 가리킵니다.
  • 2>some.file-- 지정된 파일에 쓰도록 fd 2를 변경합니다. 이것은 실제로아니요fd 1이 현재 사용하고 있는 것을 변경합니다.

우리가 바꾸고 싶다면주문하다리디렉션을 수행하면 다른 결과를 얻게 됩니다.

$ sh -c 'echo stdout; echo stderr >&2' 2>some.file >&2
$ cat some.file 
stdout
stderr

우리는 fd 2를 변경했기 때문에첫 번째.그 다음에fd 1을 fd 2의 위치로 리디렉션현재 사용중.

내 용어가 잘못되었을 수 있습니다("가리키다" 등). 이것이 내가 리디렉션이 작동했던 것을 기억하는 방법입니다.

관련 정보