摘要:如何在後臺運行交互式任務?在後臺shell腳本中使用netcat/cat(如何避免停止(tty輸入)?)
詳細信息:我試圖在ash shell(Busybox)下運行這個簡單的腳本作爲後臺任務。
myscript.sh &
然而腳本立即停止...
[1] +停止(TTY輸入)myscript.sh
的MyScript可.sh內容...(只有相關部分,其他那麼我陷阱SIGINT,SIGHUP等)
#!/bin/sh
catpid=0
START_COPY()
{
cat /dev/charfile > /path/outfile &
catpid = $!
}
STOP_COPY()
{
kill catpid
}
netcat SOME_IP PORT | while read EVENT
do
case $EVENT in
start) START_COPY;;
stop) STOP_COPY;;
esac
done
從簡單的命令行測試中,我發現bot cat和netcat試圖從tty讀取數據。 請注意,這個netcat版本沒有-e來停止tty。
現在可以做些什麼來避免myscript停止?
事情我試圖所以對於沒有任何成功:
1)的netcat /貓... <的/ dev/TTY(或tty
輸出)
2)運行該塊含有貓和使用()在子shell中使用netcat。這可能會工作,但如何抓住貓的PID?
在你的專家...
的問題依然存在。 爲大家簡單的測試嘗試:
1)在一個終端運行的netcat -l -p 11111(不&)
2)在另一個終端運行netcat的本地主機11111 &(這應該後停止同時消息停止(TTY輸入))
如何避免這種情況?
沒有更多的專家?任何想法? – LovelyVirus
如果您可以從子流程中捕獲輸入和輸出,您可以使用'script'。如果這樣做不行,你可以嘗試研究['socat'](http://www.dest-unreach.org/socat/doc/socat.html);它具有先進的PTY處理功能,但我無法弄清楚如何獲得STDIN。 –
illusatration是沒有工作的腳本的一部分。 socat不是我擁有的環境的選擇(不能在那裏獲得)。 已經厭倦了將/ dev/ttyS0重定向到netcat,它似乎正在工作,但它然後停止接收信號。 – LovelyVirus