terminal avisa ao fechar quando aberto dentro de um script

terminal avisa ao fechar quando aberto dentro de um script

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 deseja reverter antes que o script termine. Há uma instrução de leitura que pausa o processo até que o usuário pressione [enter]. Porém, um usuário infeliz ocasionalmente clicará no botão Fechar [x] no canto superior direito. Não encontrei uma armadilha que capture o botão Fechar, mas um aviso servirá. O terminal gnome fornece o aviso necessário.

Mas, quando o gnome-terminal é iniciado a partir de um script (digamos, 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 desta forma fecha sem aviso enquanto o script ainda está ativo.

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

Responder1

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

Responder2

Na verdade, você pode desconectar seu processo de execução readx.shda janela do terminal, portanto, mesmo se você fechar a janela do gnome-terminal, ele continuará sendo executado em segundo plano e completando o que deveria fazer. Para fazer isso, você deve usar nohupo comando - 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" Script 123.shcontém apenas arquivos sleep 7 && ls -a > 1.txt. Então, quando executo o comando anterior e fecho a janela do gnome-terminal, o arquivo 1.txt é criado mesmo assim.

Responder3

Tentei este comando para resolver o problema.

Exec=mate-terminal -e "bash -i  -c 'ssh my.server';bash"

Este comando foi testado apenas em mate-terminal, não gnome-terminal.

Minha mate-terminalversão é 1.16.3 no CentOS7.

informação relacionada