BASH: como visualizar o histórico de comandos no loop while?

5

Eu tenho uma entrada de aceitação de loop simples:

#!/bin/bash
while true; do
    read -rep $'\n '"$USER"'> ' userInput
    echo "$userInput"
done

Exemplo:

./input.sh 

 username> command1
command1

 username> command2
command2

É possível ter um histórico de comandos? Para que eu possa pressionar meu teclado para ver os comandos executados anteriormente (sem sair do loop while)?

    
por user321630 18.11.2018 / 21:49

2 respostas

8

Você pode usar o pequeno wrapper Readline rlwrap . Esta é uma pequena ferramenta que fornece histórico de comandos para utilitários que não implementam por si mesmos.

Você usaria rlwrap no próprio script:

rlwrap -a ./script.sh

Isso salvaria um arquivo de histórico chamado ~/.script.sh_history e usaria esse arquivo não apenas na sessão atual, mas também em sessões futuras para fornecer uma espécie de histórico que você poderia percorrer.

Veja o manual para rlwrap .

rlwrap é comumente disponível como um pacote na maioria dos Unices, mas também pode ser obtido de seu repositório GitHub .

    
por 18.11.2018 / 22:23
0

Você pode usar history -s para editar a lista de histórico e read -e para possibilitar a visualização do histórico.

#!/bin/bash
while true; do
    read -rep $'\n '"$USER"'> ' userInput
    history -s "$userInput"
    echo "$userInput"
done

Note que existem várias opções sobre o histórico de comandos. O comportamento pode ser muito diferente entre um script e um shell interativo. Por exemplo, o histórico de comandos não é carregado ou salvo em um arquivo automaticamente em um script, o que pode ou não ser desejável em sua situação. Mas você pode consertá-lo adicionando mais código, se não.

    
por 19.11.2018 / 09:15