Comando Bash Trap

Comando Bash Trap
Um comando Bash embutido que é usado para executar um comando quando o shell recebe qualquer sinal é chamado de 'trap'. Quando qualquer evento ocorre, Bash envia a notificação por qualquer sinal. Muitos sinais estão disponíveis em Bash. O sinal mais comum de Bash é o SIGINT (interrupção do sinal). Quando o usuário pressiona Ctrl+C para interromper qualquer processo do terminal, esse sinal é enviado para notificar o sistema. Como você pode usar o comando TRAP para lidar com diferentes tipos de sinais é explicado neste tutorial.

Sintaxe:

armadilha [-lp] [[arg] Signal_spec…]

ou

armadilha [ação] [sinal]
Chave Descrição
-eu É usado para exibir a lista de todos os nomes de sinais com o número correspondente.
-p É usado para exibir comando de sinal ou comando de armadilha para signal_spec.
Arg É usado para executar um comando quando o shell recebe o (s) sinal (s).
Signal_spec Ele contém o nome do sinal ou o número do sinal.
  • Comando de trap sem valor arg ou com '-' arg valor redefinirá o sinal especificado para o seu valor original.
  • Comando TRAP com o valor 'null' arg ignora o sinal especificado enviado pelo shell ou comando.
  • A Signal_spec com o valor, saída (0) vai executar arg depois de sair da concha.
  • A Signal_spec com o valor depurar Executará Arg antes de cada comando.
  • A Signal_spec com o valor retornar Executará Arg cada vez que uma função de shell é executada ou um script executado por “.”.
  • A Signal_spec com o valor errar Executará Arg todas as vezes em falha de comando.

Comando de armadilha sem qualquer opção e arg

Execute o seguinte comando do terminal para exibir a lista de todos os comandos associados a cada condição. Se algum comando 'trap' não estiver definido antes, o comando a seguir não exibirá nenhuma informação.

$ trap

Comando de trap com -l opção

Execute o seguinte comando do terminal para exibir a lista de todos os nomes de sinais com número.

$ trap -l

A saída do comando acima mostrará a lista de 64 sinais com números.

Defina o comando TRAP para ERR e saída

O seguinte primeiro comando definirá um comando 'trap' que será executado quando qualquer erro de shell ocorrer ou saídas de shell. Este comando 'trap' removerá Temp.TXT arquivo do local atual. O comando 'ls' é usado para verificar o Temp.TXT O arquivo existe ou não no local atual. Por último saída O comando é usado para fechar o terminal e executar o comando 'trap' que é definido antes.

$ trap 'rm temp.Txt 'err saída
$ ls
$ saída

A saída a seguir aparecerá após a execução dos comandos acima.

Agora, se o usuário abrir o terminal novamente após a saída e executar o comando 'LS', então Temp.TXT O arquivo não existirá.

Defina o comando 'trap' com o número do sinal de SIGUP, SIGQUIT e SIGKILL

O número do sinal de SIGUP, SIGQUIT e Sigkill são 1, 3 e 9. O primeiro comando a seguir definirá uma armadilha para esses três sinais. Quando algum desses sinal ocorrerá, a mensagem “O comando de trap é executado”Irá imprimir. Execute o seguinte comando do terminal.

$ trap 'eco trap comando executado' 1 3 9

Quando o usuário vai pressionar Ctrl+c Para gerar o sinal de atribuição do sinal por 'trap', então o 'eco' Comando do comando TRAP será executado e a seguinte saída será exibida.

Definir comando 'trap' para o sigterm em um script

Sigterm O sinal é usado para encerrar o processo imediatamente, liberando seus recursos. Crie um arquivo bash chamado 'trapscript.sh'Com o seguinte código. Um infinito para loop é declarado no script que imprimirá um texto continuamente até Sigterm Ocorre o sinal. O usuário tem que pressionar Ctrl+z para gerar Sigterm sinal.

trapscript.sh

#!/BIN/BASH
# Defina uma armadilha para sinais SIGINT e SIGTERM
armadilha "ecoar o programa é encerrado."SIGTERT SIGINT
#Display Mensagem para gerar SigMert
eco "Pressione Ctrl+Z Pare o processo"
#Initialize Counter Variable, eu
i = 1
#declare infinito para loop
para(;;)
fazer
#Print Message with Counter i
eco “executando o loop por US $ i times”
#Ncrement o balcão por um
((i ++))
feito

Execute o script executando o seguinte comando e pressione Ctrl+Z para gerar Sigterm sinal. A seguinte saída semelhante aparecerá.

$ Bash trapscript.sh

Defina um comando 'trap' para executar uma função com base em sinal específico

Você pode associar um comando 'trap' a qualquer função definida pelo usuário. Crie uma festa chamada trapfunc.sh e adicione o seguinte script. Aqui, uma função personalizada nomeada func () é declarado para imprimir uma mensagem simples, "Tarefa completa". Um loop for-in é definido para ler e imprimir a lista de todos os arquivos e pastas do diretório de trabalho atual. 'armadilha' O comando definido no início da lista chamará a função, func () Quando o programa termina.

trapfunc.sh

#!/BIN/BASH
# Ligue para a função Func na saída
TRAP Func Exit
# Declare a função
função func ()
eco "tarefa concluída"

# Leia os arquivos e pastas da lista de diretórios atuais usando o loop
para eu em *
fazer
eco "$ i"
feito

Execute o script do terminal.

Execute o script.

$ Bash Trapfunc.sh

A saída a seguir mostra que, "Tarefa completa”O texto é impresso após a impressão de todos os arquivos e pastas do diretório atual.

Conclusão

Este tutorial mostra como o comando 'trap' pode ser usado no Linux para executar qualquer tarefa automatizada com base no sinal gerado. Ajuda os usuários a rastrear diferentes tipos de erros e tomar medidas adequadas que podem ser atribuídas antes usando este comando. Muitos programas ou scripts alocam alguns recursos específicos ao executar no sistema. Se algum programa em execução ou script saia ou rescindir anormalmente, os recursos usados ​​por esse programa serão bloqueados. O comando 'trap' pode ser usado para resolver este problema. A tarefa de limpeza de recursos pode ser feita facilmente usando este comando. Espero que o leitor tenha uma idéia clara dos usos deste comando depois de ler este tutorial.