Итак, у меня есть следующий скрипт bash с псевдонимом "fortunes":
#!/bin/bash -i
REPLY=;
history -w /tmp/fortunes_history_backup; # save history ...
history -c; # and clear it.
while [ ! \( "$REPLY" = "q" -o "$REPLY" = "quit" -o "$REPLY" = "exit" \) ];
do
clear;
if [ -n "$REPLY" ]; then
history -s $REPLY; # store command in history
fi
(fortune -c $REPLY;) || (clear; fortune -c;) # try to use the command as fortune file;
# if that file can't be found, use a random one
# echo `history -p !-1`;
read -e;
done
history -r /tmp/fortunes_history_backup # restore history
соответствующая часть:
- Я делаю резервную копию истории
- тогда я это очищаю
- затем каждый раз, когда пользователь вводит что-то, я добавляю это в историю
- когда я закончу, я восстановлю старую историю.
Теперь я хочу, чтобы пользователь мог перемещаться по своей истории внутри этого скрипта с помощью клавиш со стрелками, как в обычном bash.
history -p !-1
(получить последнюю запись), history -w
, history -c
и history -r
все работают как положено; однако нажатие клавиш со стрелками во время работы скрипта ничего не делает.
(До того, как у меня были команды history, перед запуском скрипта проходила бы история моего bash.)
Есть ли способ заставить эту работу?
(Я подозреваю, что происходит то, что bash не обновляет историю, пока сценарий не завершится, что означает, что решения не существует ...)