Tentei ter um programa interativo em um script bash:
my_program
E eu gostaria de poder fechá-lo com 'Ctrl + c'. Mas quando eu faço isso, meu script também está fechando.
Eu sei sobre.
trap '' 2
my_program
trap 2
Mas, neste caso, simplesmente não consigo fechar my_program
com Ctrl + c.
Você tem alguma idéia de como permitir Ctrl + c em um programa, mas não fecha o script que o executa?
EDIT: add example
#!/bin/bash
my_program
my_program2
Se eu usar Ctrl + c para fechar my_program
, my_program2
nunca será executado porque todo o script foi encerrado.
tail
s em vez de matar gatos na próxima vez?Você pode redefinir uma armadilha para o padrão, fornecendo o comando trap
-
como seu argumento de ação. Se você fizer isso em um subshell , isso não afetará a armadilha no shell pai. No seu script, você pode fazer isso para cada comando que precisa ser interrompido com Ctrl-C:fonte
exec my_program
no subshell, para ser um pouco mais eficiente.Quando você usa Crtl+ C, você interrompe o programa (" mata ").
O que você provavelmente está procurando é suspender seu programa (" pausar "). Para isso, você pode usar Crtl+ Z.
Depois que o programa estiver em pausa, você poderá vê-lo usando
jobs
. Por exemplo:[1]+ Stopped ./foobar
Aqui eu tenho apenas um emprego, trabalho nº 1, mas pode haver mais de um - cada trabalho tem seu próprio número.
Você pode controlar o processo suspenso usando vários comandos, por exemplo
bg
,fg
ekill
.bg %1
reiniciará trabalho # 1 no b ack g rodadafg %1
reinício do trabalho # 1 no f minériog roundkill %1
matará o trabalho nº 1Observe que você pode usar
bg
efg
sem argumentos se tiver apenas um trabalho ativo.fonte