“</ dev / null”은 무엇을 의미합니까?


16

나는 블랙홀처럼 행동하는 > /dev/null것을 리디렉션한다는 것을 이해 /dev/null합니다. 그러나 나는 무슨 < /dev/null뜻 인지 이해하지 못합니다 . 다음과 같이 작성된 스크립트를 보았습니다.

nohup myprogram > foo.out 2> foo.err < /dev/null &

그럼,하지 < /dev/null평균 위의 코드에서?

다음은 제안 된 예입니다 .


답변:


19

모든 I / O 스트림이 계정 / 점유되도록합니다.

이러한 방식으로 백그라운드 프로세스는 터미널에 "연결"되어 있지 않으므로 TTY에서 프로그램을 읽지 않아도 비즈니스에 접근 할 수 있으므로 터미널이 중단됩니다.

이 경우 쉘 스크립트에서 ssh를 통해 프로세스를 시작하므로 스크립트가 방해받지 않고 이동할 수 있습니다.


내 프로그램이 입력을받는다고 가정하지만이 경우 내 프로그램을 입력으로 아무것도 공급하지 않습니까?
Qian Chen

감사. 를 제외한 나머지 부분을 모두 이해합니다 < /dev/null.
Qian Chen

코드없이 동일한 코드와의 차이점은 무엇 < /dev/null입니까?
Qian Chen

실제로 여기에서 코드를 읽습니다 : stackoverflow.com/questions/29142/…
Qian Chen

2
도움이되어 기쁘다! 해결 방법에 대해 죄송합니다. 그래도 상황은 도움이되었습니다! - 보조 노트 : 나는 2 분 내 의견의 무리를 삭제거야, 지금은 일이 꼼짝되어, 단지 그것을보고 다른 사람에 대한 혼란 보인다
user3276552

12

program </dev/nullprogram파일 설명자 0 (예 : STDIN)을 통해 파일에서 입력 인수 (옵션에 대한 입력 매개 변수이거나 입력 파일이 될 수 있음)를 취하고 있음을 의미 합니다 /dev/null.

이미 알고 있듯이 /dev/null아무것도 포함하지 않으면 읽을 때 EOF (파일 끝)에 알리므로 입력을받는 모든 프로그램 /dev/null은 기본적으로 아무것도 입력 인수로 리디렉션하지 않습니다.


따라서 < /dev/null제외해야 할 차이점이 있습니까? 그냥 같이 쓰기nohup myprogram > foo.out 2> foo.err &
키안 첸

1
@ElgsQianChen 그것은 당신의 programSTDIN으로 무엇을 원하십니까? 일부 프로그램은 STDIN으로 무언가를 넣어야하므로 STDIN으로 사용 /dev/null하고 프로그램에서 처리하고 STDOUT 및 STDERR을 언급 된 파일에 넣도록하는 경우가 있습니다.
heemayl

그렇다면 입력이 프로세스를 차단하는 것을 효과적으로 막고 입력 요청에 아무것도 공급하지 않습니까?
Qian Chen

1
@ElgsQianChen 파일 디스크립터 0, 즉 STDIN을 차단하므로 더 이상 입력을 전달할 수 없습니다. 입력을 받도록 구성된 다른 FD가 없으면 프로그램에 더 이상의 입력을 제공 할 수 없습니다.
heemayl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.