유용한 정보를 생성 stdout
하지만에서 읽는 프로그램이 있습니다 stdin
. 표준 입력에 아무것도 제공하지 않고 표준 출력을 파일로 리디렉션하고 싶습니다. 지금까지는 너무 좋습니다.
program > output
tty에서 아무것도하지 마십시오.
그러나 문제는 백그라운드에서 이것을하고 싶습니다. 만약 내가한다면:
program > output &
프로그램이 일시 중단됩니다 ( "일시 중단 (tty input)").
만약 내가한다면:
program < /dev/null > output &
EOF에 도달하면 프로그램이 즉시 종료됩니다.
내가 필요한 것은 program
무한한 시간 동안 아무것도하지 않고 읽지 않는 것으로 파이프하는 것 같다 stdin
. 다음과 같은 접근 방식이 작동합니다.
while true; do sleep 100; done | program > output &
mkfifo fifo && cat fifo | program > output &
tail -f /dev/null | program > output &
그러나 이것은 모두 매우 추악합니다. 가 있다 (의역 "무기한, 아무것도하지"로, 표준 유닉스 유틸리티를 사용하여, 우아한 방법이 man true
). 어떻게하면 되나요? (여기서 우아함에 대한 나의 주요 기준 : 임시 파일, 바쁜 대기 또는 주기적 깨우기, 이국적인 유틸리티 없음, 가능한 한 짧음)
su -c 'while true; do true; done | cat > ~/output &' user
?
1<&-
프로그램이 종료 된다고 가정합니다 .
su -c 'program | output &' user
. "서비스 / 데몬"을 처리하기위한 적절한 방법으로 백그라운드 작업을 만드는 것과 비슷한 질문을하려고합니다. 또한 리디렉션STDERR
하지 않고 리디렉션 할 수없는 것으로 나타났습니다STDOUT
. programA가 전송 솔루션STDOUT
에STDIN
programB의 후 리디렉션STDERR
로그 파일 :programA 2> /var/log/programA.log | programB 2> /var/log/programB.log 1> /dev/null