executa o shell script de onde parou a execução [closed]

0

Eu tenho o script bash escrito para ler cada linha de um arquivo que possui comandos e executá-los um a um e para quando um comando falha.

while read -r line
do
$line || exit 1
done< /root/ansi-pb/sample.txt

exemplo.txt tem os seguintes comandos

echo "hello world"
free -m
mvn -version
date
echo "bye"

Eu quero improvisar esse script, então se eu encontrar qualquer comando com falha, eu o corrigirei em um arquivo de texto e quando eu executar novamente o script, ele deve começar somente a partir do comando com falha, mas não do começo

como posso conseguir isso?

    
por hruday 02.03.2017 / 12:11

2 respostas

1

#!/bin/bash
echo "$0 $$"
##Here do your stuff and redirect the errors to a log file
##if an error is found say using $?, use the following
kill -SIGSTOP $$
##After you'r done correcting your file
##use kill -SIGCONT <pid> on a console, the process shall continue
## Put in a mechanism to retry the last executed command 
echo "I am done!!! after SIGSTOP $$"
exit 0

Este é apenas um exemplo, você poderia implementar isso de acordo com suas necessidades.

    
por 02.03.2017 / 12:29
1

Isso define uma ERR trap:

trap 'printf "Error for %s, halted, continue with fg\n" "$cmd"; kill -s STOP $$; continue' ERR

while IFS= read -r cmd; do
    command $cmd
done <input

O trap é acionado por qualquer erro que normalmente faria com que o script falhasse quando executado sob set -e . A armadilha imprimirá uma mensagem informativa e interromperá o processo temporariamente.

Quando o usuário a retoma com fg , a instrução continue no trap garante que a próxima linha de entrada seja lida.

Enquanto o script estiver suspenso, pode-se editar o arquivo de entrada. O script continuará lendo a próxima linha de entrada após a linha que contém o comando com falha.

    
por 02.03.2017 / 12:54

Tags