Also syntaktisch ist das korrekt. Ich würde in Deiner recording.end aber das '&' hinter der Zeile "if pidof udpstreampes > /dev/null; then killall -q udpstreampes; fi" rausnehmen. Und wenn ich Du wäre würde ich auch gleich die komplette Abfrage rausnehmen und die Zeile abändern zu "killall -q udpstreampes".
Mit "&&" kann man Prozesse in Abhängigkeit des Rückgabewertes anderer Prozesse ausführen. Abstrakt gesprochen heißt "A && B" nichts anderes, als dass B nur dann aus geführt wird wenn A erfolgreich beendet wurde (Rückgabewert 0).
Kannst ja mal zur Verdeutlichung ein "ls" und in der nächsten Zeile sofort ein "echo $?" ausführen. Da müsste dann 0 erscheinen. Ein "ls blaflasel" gefolgt von einem "echo $?" müsste irgendwas ungleich 0 liefern. Ergo würde "ls blafasel && echo okay" keine Zeile okay ausgeben, da die Datei blafasel nicht existiert. Legst Du sie aber an, so erscheint ein okay.
'&' macht was anderes. Mit '&' kannst Du Prozesse in den Hintergrund schicken und sofort mit der weiteren Bearbeitung des Scriptes weitermachen. In Deiner recording.end heißt das konkret, dass nicht erst 30 Sekunden gewartet wird, bis die nächste Zeile mit dem udpstreampes abgearbeitet wird. Stattdessen wird das sleep und der Rest der Zeile in den Hintergrund geschickt und die udpstreampes-Zeile kann sofort ausgeführt werden (im Hintergrund wird aber trotzdem 30 Sekunden gewartet, bis der neutrino-Prozess reniced wird).
Konnte ich mich irgendwie verständlich ausdrücken?
Ach ja: ';' trennt zwei Befehle voneinander. Sprich: "A ; B" ist dasselbe als wenn Du A und B in eigene Zeilen schreibst.