Parte do script shell não sendo executada

3

Acabei de começar a dar pequenos passos no script de shell. Meu script é mais ou menos assim:

firefox -new-tab -url google.com -new-tab -url yahoo.com
clear
cd /opt/lampp
sudo ./lampp start
cat somefile

As novas abas abrem-se no Firefox e, em seguida, o terminal pára a execução posterior (o shell não volta a mostrar o prompt, ele ainda está executando o Firefox). Se eu pressionar Ctrl + C , ele terminará a janela do Firefox e o terminal retornará ao estado inicial do terminal.

Como eu posso reescrever o código para que todas as linhas de código funcionem corretamente (eu quero que o Firefox abra primeiro, preferencialmente)? O que estou fazendo errado?

    
por Ajay 09.06.2015 / 06:32

1 resposta

3

Você precisa adicionar o "e" comercial (& amp;) ao final da primeira linha do script ou usar nohup .

Esse e comercial à direita direciona o shell para executar o comando em segundo plano, ou seja, é bifurcado e executado em um sub-shell separado, como um trabalho, de forma assíncrona. O shell retornará imediatamente o status de retorno de 0 para true e continuará como normal, processando comandos adicionais em um script ou retornando o foco do cursor de volta ao usuário em um terminal Linux.

nohup captura o sinal de desligamento enquanto o "e" comercial não, isso significa que ao executar um comando usando & amp; e saindo do shell depois, o shell terminará o subcomando com o sinal hangup kill -SIGHUP PID , enquanto nohup captura o sinal e o ignora.

Então, agora seu script ficaria assim:

firefox -new-tab -url google.com -new-tab -url yahoo.com & 
clear
cd /opt/lampp
sudo ./lampp start
cat somefile

Como o OP disse a última versão (usada nohup):

nohup firefox -new-tab -url google.com -new-tab -url yahoo.com  & 2>/dev/null
clear
cd /opt/lampp
sudo ./lampp start
cat somefile
    
por Maythux 09.06.2015 / 07:37