Проблема в том, что переменные, установленные в do
цикле, не поддерживаются от одного прохода к следующему.
Простое решение - сохранить вывод списка во временный файл, а затем дважды отсканировать его:
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
Теперь у вас есть две переменные, которые вам нужно установить. Это не очень элегантное решение, но оно простое и легкое для понимания и поддержки. Обратите внимание, что я использовал sed
для выполнения grep
функций: руководство о том, как это работает, см. Здесь .
Однако вы можете избежать временного файла с более запутанным решением: -
Ids="$(pactl list short sink-inputs | \ sed -n -e 's/^Sink Input #\(.*\)$/\1/p' \ -e 's/.*module-stream-restore.id = "\(.*\)"$/\1/p')"
Теперь у вас есть обе переменные Ids
, разделенные новой строкой: вы можете разделить их с помощью: -
streamId="$" Id="$"
Если вам не нравятся временные переменные, вы можете использовать Id
вместо Ids
!
Я проверил это, скопировав вывод списка и использовав его вместо реальной pactl
команды, поэтому все должно работать с живой командой.