Das Problem ist, dass in der do
Schleife festgelegte Variablen nicht von einem Durchgang zum nächsten beibehalten werden.
Die einfache Lösung besteht darin, die Listenausgabe in einer temporären Datei zu speichern und anschließend zweimal zu scannen: -
pactl list short sink-inputs >temp.lst streamId=$(sed -n 's/^Sink Input #\(.*\)$/\1/p' <temp.lst) id=$(sed -n 's/.*module-stream-restore.id = "\(.*\)"$/\1/p' <temp.lst) rm temp.lst
Sie haben jetzt die beiden Variablen, die Sie beide benötigen. Es ist keine sehr elegante Lösung, aber es ist unkompliziert und leicht zu verstehen und zu warten. Beachten Sie, dass ich sed
die grep
Funktionen ausgeführt habe: Eine Anleitung, wie dies funktioniert, finden Sie hier .
Sie können die temporäre Datei jedoch mit einer komplizierteren Lösung vermeiden: -
Ids="$(pactl list short sink-inputs | \ sed -n -e 's/^Sink Input #\(.*\)$/\1/p' \ -e 's/.*module-stream-restore.id = "\(.*\)"$/\1/p')"
Sie haben jetzt beide Variablen Ids
, getrennt durch eine neue Zeile: Sie können sie mit teilen: -
streamId="$" Id="$"
Wenn Sie auch keine temporären Variablen mögen, können Sie Id
statt Ids
!
Ich habe dies getestet, indem Sie Ihre Listenausgabe kopiert haben und diese anstelle eines echten pactl
Befehls verwenden. Daher sollte alles mit einem Live-Befehl funktionieren.