Você pode usar rlwrap
para isso, se não se importar de instalar o software.
Você provavelmente desejará manter um arquivo de histórico separado que apenas mantenha o histórico para o prompt específico em seu script (isto é, evite misturar com o histórico de comandos do shell do usuário).
Veja um exemplo que pode funcionar para você:
#!/bin/sh
# Save in rlwrap_example.sh
HISTORY=$HOME/.myscript_history
USERINPUT=$(rlwrap -H $HISTORY sh -c 'read REPLY && echo $REPLY')
echo "User said $USERINPUT"
$ ./rlwrap_example.sh
hello
User said hello
No script acima, o usuário pode usar toda a funcionalidade readline do GNU , com histórico veiculado de - e armazenado em - ~/.myscript_history
. Ajuste conforme necessário.
Como alternativa, você pode usar o read -e
do bash, que ativa readline para invocações de read
, mas você provavelmente achará sua funcionalidade de histórico muito limitada (ou seja, quase inexistente).