Tenho muitos documentos para visualizar e gostaria de visualizá-los um por um, para que o próximo seja aberto quando eu fechar o anterior.
Já fiz isso com evince antes, com
for i in `ls | grep .pdf`; do evince $i; done
No entanto, fazer o mesmo com o xdg-open falha porque o xdg-open não bloqueia como o evince.
Existe uma maneira de executar o mesmo loop for, mas com xdg-open, para que quando eu fechar o aplicativo que foi aberto, a próxima iteração do loop for seja executada?
Não consegui encontrar uma maneira limpa, então esta é uma solução alternativa; abra cada arquivo e execute um loop ocupado esperando que "o" processo de correspondência seja encerrado. Também atualizei seu
for
loop para que você não esteja analisando ls e citando o parâmetro filename:A suposição aqui é que xdg-open abrirá o arquivo; esse processo é bifurcado pelo ambiente de área de trabalho e o controle retorna ao script. O script então reúne o tty, a sessão e o ID do usuário atual e pede
pgrep
para procurar (o) processo que corresponda a todos estes critérios:... tudo em uma tentativa de capturar apenas o processo correspondente que o xdg-open lançou.
Quando esse processo não existir mais, continuamos com o
for
loop para o próximo arquivo.Se o atraso de um segundo for muito longo, você pode substituí-lo (no Linux) por uma suspensão de menos de um segundo ou simplesmente
:
por nenhuma espera.