terminal avisar no fechamento quando aberto dentro de um script

4

Primeiro, a pergunta: Como posso avisar o usuário que um script está sendo executado quando o usuário clica no botão Fechar e o próprio terminal (e o processo em execução nele) foi iniciado a partir da linha de comando.

Eu tenho um script que executa ações que o usuário desejará reverter antes que o script termine. Há uma instrução de leitura que pausa o processo até que o usuário pressione [enter]. Mas, um usuário infeliz ocasionalmente clicará no botão fechar [x] no canto superior direito. Eu não encontrei uma armadilha que pega o botão de fechamento, mas um aviso serve. O gnome-terminal fornece o aviso necessário.

Mas , quando o terminal gnome é iniciado a partir de um script (por exemplo, uma ação personalizada do Thunar), o recurso não funciona. Para esclarecer, considere o script:

gnome-terminal --command="sh readx.sh"

Onde readx.sh contém uma única linha: read x

Ao clicar no botão superior direito [x], um terminal iniciado dessa maneira é fechado sem aviso enquanto o script ainda está ativo.

Qualquer método de trapping ou aviso funcionará para mim.

    
por markb 05.01.2015 / 19:22

2 respostas

2

Sim! Incluindo um prompt de zenity funciona bem para mim. Quando o script é executado com nohup e um prompt zenity é incluído, o thread será bloqueado conforme desejado.

    
por 08.01.2015 / 15:09
0

Você pode realmente destacar o processo de execução de readx.sh da janela do terminal, portanto, mesmo se você fechar a janela do gnome-terminal, ela continuará a ser executada em segundo plano e concluirá o que deve ser feito. Para fazer isso, você deve usar o comando nohup - ele desconecta o processo do terminal, redireciona sua saída para nohup.out e o protege de SIGHUP .

Eu testei com o seguinte comando: gnome-terminal -e "nohup bash ./123.sh" O script 123.sh contém apenas sleep 7 && ls -a > 1.txt . Então, quando eu executo o comando anterior e fecho a janela do gnome-terminal, o arquivo 1.txt é criado mesmo assim.

    
por 08.01.2015 / 12:00