Não consegui encontrar um caminho limpo, por isso é uma solução; abra cada arquivo e, em seguida, execute um loop ocupado aguardando a saída do "processo de correspondência". Também atualizei seu loop for
para que você não esteja analisando ls e esteja citando o parâmetro filename:
#!/bin/bash
for i in *.pdf
do
xdg-open "$i"
t=$(tty)
t=${t##/dev/}
s=$(ps -o session= -p $$)
while pgrep -f "$i" --terminal "$t" --uid "$(id -u)" --session "$s" >/dev/null 2>&1
do
sleep 1
done
done
A suposição aqui é que o xdg-open abrirá o arquivo; esse processo é retirado do ambiente de área de trabalho e o controle retorna ao script. O script, em seguida, reúne o tty, a sessão e o ID do usuário atual e solicita que pgrep
procure o processo que corresponde a todos esses critérios:
- nome completo do processo inclui o nome do arquivo do loop
- o terminal associado é o que estamos usando
- o UID do processo corresponde ao nosso
- a sessão do processo corresponde à nossa
... tudo em uma tentativa de capturar apenas o processo correspondente que o xdg-open iniciou.
Quando esse processo não existir mais, continuaremos com o loop for
para o próximo arquivo.
Se o atraso de um segundo for muito longo, você poderá substituí-lo (no Linux) por um sono de sub-segundo ou um simples :
para não esperar nada.