Desidero inviare alcuni dati a un processo radice con una named pipe. Ecco la sceneggiatura e funziona benissimo:Script Bash con lettura non bloccante
#!/bin/sh
pipe=/tmp/ntp
if [[ ! -p $pipe ]]; then
mknod -m 666 $pipe p
fi
while true
do
if read line <$pipe; then
/root/netman/extra/bin/ntpclient -s -h $line > $pipe 2>&1
fi
done
In realtà ho diversi script come questo. Vorrei racchiuderli tutti in una singola sceneggiatura. Il problema è che i blocchi di esecuzione sulla prima "lettura" e io non posso eseguire più "letture" in un singolo processo. Non c'è niente che posso fare? È possibile avere una lettura bash "non bloccante"?
Perché si desidera combinare operazioni separate in un unico sceneggiatura? Se funzionano correttamente, lasciali indipendenti. È molto più facile che provare a piegare la shell per eseguire letture non bloccanti. I processi sono economici. I processi semplici sono anche più sicuri di quelli complessi e i processi di root devono essere sicuri. –
Sono d'accordo con te, ma ogni processo consuma 628K di RAM (è una copia della bash) e sono in un ambiente embedded. Preferirei salvare più memoria possibile. – michelemarcon
Se questo è un grosso problema, scrivere il codice in C. –