Bash-Befehl zum Ausführen eines Vordergrundsatzes von Hintergrundbefehlen

Bash-Befehl zum Ausführen eines Vordergrundsatzes von Hintergrundbefehlen

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:

$1und $2beziehen Sie sich auf das erste und zweite Argument in der Befehlszeile. evalführt diese Befehle aus, indem &sie im Hintergrund ausgeführt werden. waitWarten 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"

verwandte Informationen