![2>&-, 2>/dev/null, |&, &>/dev/null 및 >/dev/null 2>&1의 차이점](https://linux55.com/image/30541/2%26gt%3B%26amp%3B-%2C%202%26gt%3B%2Fdev%2Fnull%2C%20%7C%26amp%3B%2C%20%26amp%3B%26gt%3B%2Fdev%2Fnull%20%EB%B0%8F%20%26gt%3B%2Fdev%2Fnull%202%26gt%3B%26amp%3B1%EC%9D%98%20%EC%B0%A8%EC%9D%B4%EC%A0%90.png)
그냥 차이점을 찾아보면
2>&-
2>/dev/null
|&
&>/dev/null
>/dev/null 2>&1
tcsh
Bourne 쉘이 아닌 쉘(예 : 등) mksh
로의 이식성 .
답변1
배경:
- ㅏ번호 1= 표준 출력(예: STDOUT)
- ㅏ2 번= 표준 오류(예: STDERR)
- 숫자를 명시적으로 지정하지 않은 경우번호 1쉘(bash)에 의해 가정됨
먼저 해당 기능을 살펴보겠습니다. 참고로 다음을 참조하세요.고급 Bash 스크립팅 가이드.
기능
2>&-
이것의 일반적인 형태는 이며 M>&-
, 여기서"중"파일 설명자입니다. 그러면 참조된 파일 설명자의 출력이 닫힙니다."중".
2>/dev/null
이것의 일반적인 형태는 이며 M>/dev/null
, 여기서"중"파일 설명자입니다. 그러면 파일 설명자가 리디렉션됩니다."중", 도착하다 /dev/null
.
2>&1
이것의 일반적인 형태는 이며 M>&N
, 여기서"중"&"N"파일 설명자 번호입니다. 파일 설명자의 출력을 결합합니다."중"그리고"N"단일 스트림으로.
|&
이것은 단지 의 약어입니다 2>&1 |
. Bash 4에 추가되었습니다.
&>/dev/null
이것은 단지 의 약어입니다 >/dev/null 2>&1
. 파일 설명자 2(STDERR) 및 설명자 1(STDOUT)을 로 리디렉션합니다 /dev/null
.
>/dev/null
이것은 단지 의 약어입니다 1>/dev/null
. 파일 설명자 1(STDOUT)을 /dev/null
.
bash가 아닌 곳, tcsh, mksh 등에 이식 가능
csh
나는 외부의 다른 쉘을 많이 다루지 않았습니다 tcsh
. Bash의 리디렉션 연산자와 비교할 때 이 두 가지 작업에 대한 내 경험에 따르면 bash는 이 점에서 우수합니다. 보다tcsh 매뉴얼 페이지자세한 내용은.
csh/tcsh는 귀하가 요청한 명령을 직접 지원하지 않습니다. 유사한 함수를 구성하려면 다른 구문을 사용해야 합니다.
답변2
이는 STDERR 및 STDOUT을 리디렉션하는 것입니다.
2>/dev/null
STDERR을 /dev/null로 리디렉션(콘솔에 표시되지 않음)
|&
STDERR 및 STDOUT을 파이프 명령(cmd1 |& cmd2)의 STDIN으로 리디렉션합니다.
&>/dev/null
STDERR 및 STDOUT을 /dev/null로 리디렉션합니다(콘솔에 아무것도 표시되지 않음).
>/dev/null
STDOUT을 /dev/null로 리디렉션(콘솔에는 STDERR만 나타남)
2>&-
리디렉션과 함께 사용되는 파일 설명자를 닫는 데 사용됩니다.
이는 Bourne 쉘의 표준 리디렉션 방법입니다.
답변3
선택한 답변에 대한 부록을 고려하십시오. 어떤 형식이 POSIX이고 어떤 형식이 아닌지 궁금할 것입니다.
두 가지 POSIX 형식이 관련됩니다.
2.7.2 출력 리디렉션
리디렉션된 출력의 두 가지 일반적인 형식은 다음과 같습니다.
[n]>단어
[n]>|단어
선택적 n은 파일 설명자 번호를 나타냅니다. 이 숫자가 생략되면 리디렉션은 표준 출력(파일 설명자 1)을 참조해야 합니다.
noclobber 옵션이 설정되어 있고(set -C 설명 참조) 단어 확장자로 명명된 파일이 존재하고 일반 파일인 경우 ">" 형식을 사용한 출력 리디렉션이 실패합니다. 그렇지 않은 경우 ">" 또는 ">|" 리디렉션 형식을 사용하면 단어 확장으로 인해 이름이 지정된 파일이 생성되어 지정된 파일 설명자에서 출력되거나 지정되지 않은 경우 표준 출력으로 열립니다. 파일이 없으면 파일이 생성되고, 그렇지 않으면 열 때 빈 파일로 잘립니다.
-
2.7.6 출력 파일 설명자 복사
리디렉션 연산자:
[n]>단어(&W)
출력 파일 설명자는 다른 출력 파일 설명자에서 복사해야 하거나 출력 파일 설명자를 닫아야 합니다. word가 하나 이상의 숫자로 평가되면 n 또는 표준 출력(n이 지정되지 않은 경우)으로 표시되는 파일 설명자는 word의 숫자가 For를 사용하여 열린 파일을 나타내지 않으면 word로 표시되는 파일 설명자의 복사본이 됩니다. 출력 파일 설명자에서 리디렉션 오류가 발생합니다. 셸 오류의 결과를 참조하세요. 단어가 "-"로 평가되면 파일 설명자 n 또는 표준 출력(n이 지정되지 않은 경우)이 닫힙니다. 열리지 않은 파일 설명자를 닫으려고 시도하는 것은 오류로 간주되어서는 안 됩니다. 단어가 다른 것으로 평가되면 동작이 지정되지 않습니다.
그래서:
Function POSIX-compat POSIX
2>&- Yes close
2>/dev/null Yes redir
2>&1 Yes dup
|& No
&>/dev/null No
>/dev/null Yes redir
>&/dev/null ? ?dup
마지막 줄은 원래 질문에 없지만 bash에서는 불만없이 작동합니다. (/dev/null 대신 /dev/tty를 사용할 수도 있습니다).