Histórico dentro de um Bash Loop

0

Estou usando o bash para executar scripts complexos com loops for e wile. Eu ativo o histórico no script usando:

set -o history -o histexpand

Mas se eu executar o seguinte script:

#!/bin/bash
set -o history -o histexpand
for i in 1 2 3 4 5
do
   echo "Welcome $i times"
done
history

Eu posso ver que 'histórico' não rastreia comandos dentro do loop for:

[scripts]$ ~/test2.sh
Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times
    1  for i in 1 2 3 4 5; do    echo "Welcome $i times"; done
    2  history

Existe uma maneira de rastrear os comandos dentro do loop for também? Neste presente exemplo, eu adoraria obter o seguinte resultado:

[scripts]$ ~/test2.sh
Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times
    1  for i in 1 2 3 4 5; do    echo "Welcome $i times"; done
    2  echo "Welcome $i times"
    3  echo "Welcome $i times"
    4  echo "Welcome $i times"
    5  echo "Welcome $i times"
    6  echo "Welcome $i times"
    7  history
    
por Richard 05.09.2018 / 12:50

1 resposta

1

A "história" é uma história de comandos "previamente digitados".

No manual do GNU:

"Quando a opção -o history para o conjunto interno está habilitado ... o shell fornece acesso ao histórico de comandos, a lista de comandos digitados anteriormente."

Portanto, não substitui as variáveis do shell nem salva iterações de loop.

Para isso, você pode usar o bash debugging chamando seu script para:

bash -x myscript > to-my-log-file

Em seguida, em caso de falha, você pode ver o que aconteceu no arquivo de registro (desde que o sistema tenha tido tempo de liberar o buffer de saída).

    
por 05.09.2018 / 17:19