Abrir vários sites, um após o outro, somente em uma janela do Firefox

2

/root/file tem

https://stackoverflow.com
https://stackexchange.com
https://reddit.com

Eu preciso abrir todos esses sites um após o outro em apenas uma janela firefox . Aqui está o meu código

#!/bin/bash
while read line
do 
    if pgrep firefox; 
    then 
        firefox --new-tab "$line" ; 
    else 
        firefox "$line" ;
    fi 
done < /root/file

Eu também tentei nohup , mas não funcionou.

O problema é que, se eu usar ; , ele será vinculado ao processo de shell e não executará o próximo comando até eu sair de firefox e, se eu usar nohup ou & , separado do shell e abrirá a nova janela de firefox em vez de nova guia. Em ambos os casos, cada site é aberto em uma nova janela.

Parcialmente resolvido

xdg-open abre sites em uma janela quando os comandos são digitados manualmente no shell, como

$ xdg-open https://stackoverflow.com
$ xdg-open https://stackexchange.com
$ xdg-open https://reddit.com

mas não funciona no script. Eu tenho o seguinte script com xdg-open

#!/bin/bash
while read line
do 
    xdg-open "$line"
done < /root/file

mas novamente abre sites em janelas diferentes em vez de uma única janela.

    
por GypsyCosmonaut 23.08.2017 / 14:52

2 respostas

2

Seu problema aqui é que leva algum tempo para o Firefox iniciar. Se você executá-lo em segundo plano, da próxima vez que executar firefox --new-tab , sua primeira instância ainda não foi iniciada e não está pronta para abrir outra guia. Você deve esperar algum tempo depois de iniciar a primeira instância do Firefox:

#!/bin/bash
while read line
do
    if pgrep -u $USER firefox > /dev/null
    then
        firefox --new-tab "$line" &
    else
        firefox "$line" &
        sleep 3                 # You may want to tune this value
    fi < /dev/null
done < /root/file
Cuidado com esse tipo de construção, qualquer programa em seu loop pode comer o que vem de stdin e isso terminará seu loop prematuramente. É por isso que eu adicionei preventivamente < /dev/null à parte if .

    
por 23.08.2017 / 16:28
2

Você só precisa:

firefox https://stackoverflow.com https://stackexchange.com https://reddit.com

De acordo com os docs do mozilla

-url URL

Open URL in a new tab or window, depend on the browser option. -url can be omitted. You may list multiple URLs, separated by spaces. Firefox and SeaMonkey only.

Então você pode escrever seu script como

#!/bin/bash
firefox $(cat /root/file | tr '\n' ' ') &
    
por 23.08.2017 / 16:27