Eu tenho esse script que abre um .html
arquivo, mas quero alterá-lo para abri-lo apenas se ainda não estiver aberto.
Alguém conhece algumas linhas que precisam ser adicionadas para conseguir isso?
#!/bin/bash
fileFragment=$"*project/html/index.html"
fullPath=$(find ../ -path $fileFragment)
xdg-open $fullPath &
EDIT
Eu gostaria de uma solução genérica por isso mantive a pergunta tão simples, não é sobre navegadores, é sobre qualquer arquivo que eu abri usandoxdg-open
, já especifiquei fornecendo este exemplo, não quero mais especificá-lo para específico navegadores.
Mas se não houver uma solução genérica fácil, prefiro ter uma resposta para o meu caso específico do que nenhuma: então, no meu caso, estou usando o Firefox.
Responder1
A solução a seguir funciona apenas para comandos quecontinue correndoaté você fechar o programa/guia. Infelizmente, esse não é o caso da maioria dos programas GUI e
xdg-open
. No caso do Firefox pode-seobter uma lista de URLs abertos atualmenteegrep
isso, mas essa não é uma solução genérica nem ideal. Quanto a testar se um programa está em execução, consulteessa questão.
Você pode usar lockfile
a partir doprocmail
pacote. Comosua man
páginacontém um exemplo que corresponde exatamente ao seu caso de uso, vou apenas citá-lo:
Suponha que você queira ter certeza de que o acesso ao arquivo "importante" seja serializado, ou seja, não mais do que um programa ou script de shell deve ter permissão para acessá-lo. Para simplificar, vamos supor que seja um script de shell. Neste caso você poderia resolver assim:
... lockfile important.lock ... access_"important"_to_your_hearts_content ... rm -f important.lock ...
Agora se todos os scripts que acessam "importante" seguirem esta diretriz, você terá certeza de que no máximo um script estará sendo executado entre os comandos
lockfile
e .rm
Por padrão, todos os outros scripts aguardarão que o arquivo seja desbloqueado novamente, testando a cada oito segundos por padrão (altere, por exemplo, lockfile -5 important.lock
por cinco segundos). Se você quiser apenas verificar se está bloqueado, você pode usar o test
comando clássico:
if [ -e important.lock ]; then
# stuff to do if locked
else
# stuff to do if not locked
fi