Eu tentei ter um programa interativo em um script bash:
my_program
E desejo poder fechá-lo com 'Ctrl + c'. Mas quando eu faço isso meu script está fechando também.
Eu sei sobre.
trap '' 2
my_program
trap 2
Mas neste caso, 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 fechando o script que o executa?
EDITAR: adicionar exemplo
#!/bin/bash
my_program
my_program2
Se eu usar Ctrl + c para fechar my_program
, my_program2
nunca é executado porque todo o script é encerrado.
Você deve usar
trap true 2
outrap : 2
em vez detrap '' 2
. É isso que "help trap" em um shell bash diz sobre isso:Exemplo:
Você pode redefinir um trap para seu 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. Em seu script, você pode fazer isso para cada comando que precisa ser interrompido com Ctrl-C:Quando você usa Crtl+ C, você interrompe o programa (" mata -o").
O que você provavelmente está procurando é suspender seu programa (" pause "). Para isso, você pode usar Crtl+ Z.
Depois que seu programa estiver pausado, você poderá vê-lo usando
jobs
. Por exemplo:[1]+ Stopped ./foobar
Aqui eu só tenho um trabalho, trabalho nº 1, mas pode haver mais de um - cada trabalho tem seu próprio número.
Você pode controlar seu processo suspenso usando vários comandos, por exemplo
bg
,fg
ekill
.bg %1
irá reiniciar o trabalho nº 1 em segundo plano irá reiniciar o trabalho nº 1 na frentefg %1
g roundkill %1
matará o job #1Observe que você pode usar
bg
efg
sem argumentos se tiver apenas um job ativo.