Faydalı bilgiler üreten stdoutama aynı zamanda okuyan bir program var stdin. Standart çıktıda hiçbir şey sağlamadan standart çıktısını bir dosyaya yönlendirmek istiyorum. Şimdiye kadar, çok iyi: Yapabilirim:
program > output
ve tty içinde hiçbir şey yapmayın.
Ancak sorun şu ki bunu arka planda yapmak istiyorum. Eğer yaparsam:
program > output &
program askıya alınacaktır ("askıya alınmış (tty girişi)").
Eğer yaparsam:
program < /dev/null > output &
Program EOF'a ulaştığı için derhal sona erer.
İhtiyacım programolan şey, belirsiz bir süre boyunca hiçbir şey yapmayan ve okumayan bir şeye bağlanmak stdin. Aşağıdaki yaklaşımlar işe yarar:
while true; do sleep 100; done | program > output &
mkfifo fifo && cat fifo | program > output &
tail -f /dev/null | program > output &
Ancak, bu hepsi çok çirkin. Orada sahiptir (tefsir "süresiz, hiçbir şey yapmak" için, standart Unix araçları kullanılarak, zarif bir yolu olmalı man true). Bunu nasıl başarabilirim? (Buradaki zarafet için temel kriterlerim: geçici dosyalar yok, meşgul beklemede veya periyodik uyandırmalar; egzotik araçlar yok; mümkün olduğunca kısa.)
su -c 'while true; do true; done | cat > ~/output &' user?
1<&-programdan çıkacağını varsayıyorum ?
su -c 'program | output &' user. Benzer bir soruyu, bir "hizmet / arka plan programı" işlemek için kabul edilebilir bir yöntem olarak arka plan işleri oluşturma konusunda sormak üzereyim. Ayrıca, yönlendirmedenSTDERRde yönlendirme yapamadığımı fark ettimSTDOUT. Programa gönderir çözümSTDOUTiçinSTDINprogramB birleştirdikten sonra yönlendirirSTDERRbir günlük dosyasına:programA 2> /var/log/programA.log | programB 2> /var/log/programB.log 1> /dev/null