Bash'de bu gibi doğrusal olmayan bir boru hattı oluşturmanın en temiz (en basit, en verimli, en kısa, en hızlı, en kolay, en zarif) yolu nedir? ircpingpong mksock, irclogin ve :Bash'te doğrusal olmayan bir boru hattı oluşturmanın en temiz yolu nedir?
Üç komutları var. Ben mksock içine boru ircpingpong Stdin, irclogin ve istiyor ve boru mksockstdout içine ve ircpingpong. Bu, mksock ve ircpingpong'un bir döngüde olduğu anlamına gelir. Bir diyagram çizdim.
irclogin sadece mksock içine ilk girişini bir kez çalıştırın ve sokulması gerekmektedir. Bundan sonra herhangi bir zamanda ircpingpong ve stdin kabul edilmelidir.
#!/bin/bash
server=127.0.0.1
port=6667
infifo=/tmp/ircin
outfifo=/tmp/ircout
pongfifo=/tmp/ircpong
rm $infifo
rm $outfifo
rm $pongfifo
mkfifo $infifo
mkfifo $outfifo
touch $pongfifo
(irclogin | cat - $infifo & tail -f $pongfifo;) | mksock $server $port | tee $outfifo | stdbuf -oL ircpingpong > $pongfifo &
cat < $outfifo &
cat > $infifo
pkill tail
Bu çalışır, ancak bunu yapmak için daha iyi bir yolu olup olmadığını bilmek istiyorum: Şu anda böyle boruları ve geçici bir dosya kullanıyorum. Kuyruk kullanarak ircpingpongmksock'a geri döngü için bir boru yerine bir dosya kullanıyorum beni rahatsız ediyor. Bir boru kullanmak işe yaramadı, çünkü benim anlayışıma göre, bir şey, okumaya başlamadan önce boruya bir şeyler yazıyor ve bu yüzden özlüyor. Ayrıca, komut dosyasının sonunda kuyruğu öldürmem gerektiğinden dolayı beni rahatsız ediyor, çünkü kendi başına durmuyor ve senaryo bittikten sonra bile sokete bağlı kalıyor.
Bu, Coproceses için ne demektir. Korn kabuğunda farklı şekilde desteklenirler ve bash, bash coprocesses bash 4.0'da tanıtıldı. Http://wiki.bash-hackers.org/syntax/keywords/coproc sayfasına bakın. – cdarke