
Ich habe 2 Befehle, die ausgeführt werden und die Eingabe in der Konsole blockieren. Sie müssen also mit STRG+C beendet werden. Ich möchte sie nicht im Hintergrund ausführen, da ich bei Unterbrechungen die Kontrolle verliere. Aber ansonsten kann ich sie nicht nacheinander in einer Zeile ausführen, da der erste Befehl auf die Beendigung wartet, bevor der nächste gestartet wird.
Dafür muss es unter Unix einen Trick geben. Ich versuche so etwas wie:
$ fg-wrapper infinite-cmd1 & infinite-cmd2
Executing cmd1 in bg
Executing cmd2 in bg
(Waiting for CTRL+C to end both)
Ich suche einen Oneliner, kein Skript: fg-wrapper ist der integrierte POSIX-Befehl, von dem ich als Beispiel träumen würde (ich hätte gern kein Skript dafür schreiben müssen)
Antwort1
Versuche dies:
#!/usr/bin/env bash
echo "Executing $1 in bg"
eval $1 &
echo "Executing $2 in bg"
eval $2 &
wait
Erläuterung:
$1
und $2
beziehen Sie sich auf das erste und zweite Argument in der Befehlszeile.
eval
führt diese Befehle aus, indem &
sie im Hintergrund ausgeführt werden. wait
Warten Sie abschließend, bis diese Befehle beendet sind, oder sie können mit STRG-C beendet werden.
Versuchen Sie dieses Skript mit
./script "ping google.com > /dev/null" "ping 127.0.0.1 > /dev/null"