>/dev/null 2>&1 &와 /dev/null &의 차이점

>/dev/null 2>&1 &와 /dev/null &의 차이점

터미널에서 프로그램을 시작하기 위해 다음 명령을 사용했습니다.

program_name >/dev/null 2>&1 &

그런데 최근에 만난이 페이지다음 방법이 권장됩니다.

program_name </dev/null &>/dev/null &

이제 첫 번째가 무엇을 의미하는지 알겠습니다. 이는 stderr을 stdout으로 지정하고 stdout을 /dev/null로 지정하는 것을 의미합니다. 즉, 이제 stderr과 stdout은 모두 null을 가리킵니다.

그런데 두 번째는 무슨 뜻인가요? 터미널에서 헤드리스로 프로그램을 시작하는 데 어느 것이 더 좋습니까?

답변1

stdin기본적으로 프로그램을 실행할 때 표준 입력( ), 표준 출력( stdout) 및 표준 오류( ) 의 세 가지 "표준" 파일이 열립니다 stderr. Unix에서는 "파일 설명자"( stdin=0, stdout=1, =2)와 stderr연결됩니다 . 기본적으로 세 가지 모두 터미널(화면에서 콘텐츠를 보고 프로그램에 입력을 입력하는 인터페이스)을 제어하는 ​​장치와 연결되어 있습니다.

셸을 사용하면 파일 설명자를 "리디렉션"할 수 있습니다. 연산자는 >출력을 리디렉션하고 <입력을 리디렉션합니다.

예를 들어:

program_name > /dev/null

이는 다음과 같습니다.

program_name 1> /dev/null

파일 설명자 1('stdout')의 출력을 `/dev/null'로 리디렉션

같은,

program_name 2> /dev/null

파일 설명자 2('stderr')의 출력을 '/dev/null'로 리디렉션

리디렉션을 원할 수도 있습니다.둘 다 stdout파일로 저장 stderr하므로 다음과 같이 생각할 수도 있습니다.

program_name > /dev/null 2> /dev/null

그러나 이는 파일 설명자에 대한 인터리브 쓰기를 처리하지 않습니다(이에 대한 자세한 내용은 또 다른 질문입니다). 이 문제를 해결하려면 다음을 수행할 수 있습니다.

program_name > /dev/null 2>&1

이는 "파일 설명자 1에 대한 쓰기를 /dev/null파일 설명자 2에 대한 쓰기가 리디렉션되는 위치로 리디렉션"을 의미합니다. 이는 파일 설명자에 대한 인터리브 쓰기를 처리합니다.

이 옵션은 매우 일반적이어서 일부 쉘에는 더 짧고 기능적으로 동일한 약어가 포함되어 있습니다.

program_name &> /dev/null

마지막으로 출력을 리디렉션하는 것처럼 입력을 리디렉션할 수 있습니다.

program_name < /dev/null

stdin파일 설명자 0( )은 리디렉션되므로 /dev/null프로그램이 입력을 읽으려고 하면 EOF를 받게 됩니다.

이 모든 것을 종합하면 다음과 같습니다.

program_name </dev/null &>/dev/null &

(1) 실행 program_name, (2) 표준 입력을 /dev/null( )에서 리디렉션, (3) 파일 설명자 1과 2( 및 )를 ( )로 리디렉션, (4) 백그라운드에서 프로그램을 실행( )한다고 가정합니다.</dev/nullstdoutstderr/dev/null&>/dev/null&

답변2

> /dev/null을 사용하면 실제로 작업이 취소됩니다.

2>&1을 사용하면 오류 스트림 텍스트를 출력 스트림으로 리디렉션할 수 있습니다. 이는 누군가 실행 시 실제로 오류가 발생하는 명령을 실행하려고 시도할 때 가장 잘 이해됩니다. 명령을 있는 그대로 두 번 사용한 다음 2>&1을 사용하여 명령을 실행하십시오.

이것이 적어도 초보 사용자에게 도움이 되기를 바랍니다. 감사해요.

관련 정보