O problema é que as variáveis definidas no loop do
não são mantidas de uma passagem para a próxima.
A solução simples é salvar a saída da lista em um arquivo temporário e digitalizá-la duas vezes: -
pactl list short sink-inputs >temp.lst
streamId=$(sed -n 's/^Sink Input #\(.*\)$//p' <temp.lst)
id=$(sed -n 's/.*module-stream-restore.id = "\(.*\)"$//p' <temp.lst)
rm temp.lst
Agora você tem as duas variáveis que você precisa definir. Não é uma solução muito elegante, mas é simples e fácil de entender e manter. Observe que usei sed
para executar as funções grep
: para um guia de como isso funciona, consulte aqui .
No entanto, você pode evitar o arquivo temporário com uma solução mais complicada: -
Ids="$(pactl list short sink-inputs | \
sed -n -e 's/^Sink Input #\(.*\)$//p' \
-e 's/.*module-stream-restore.id = "\(.*\)"$//p')"
Agora você tem as duas variáveis em Ids
, separadas por uma nova linha: você pode dividi-las com: -
streamId="${Ids%$'\n'*}"
Id="${Ids#*$'\n'}"
Se você também não gosta de variáveis temporárias, pode usar Id
em vez de Ids
!
Eu testei isso copiando a saída da lista e usando isso em vez de um comando pactl
real, então tudo deve funcionar com um comando ao vivo.