Используйте отдельную историю для 'read -e' (readline)

564
BenjiWiebe

Я хотел бы написать интерактивную командную оболочку в сценарии оболочки для упрощения настройки брандмауэра iptables. Проблема в том, что read -eиспользуется история оболочки . Есть ли способ использовать отдельную историю для read -eв сценарии?

3

1 ответ на вопрос

2
rici

Если у вас есть rlwrap(пакет Debian rlwrap), то вы можете использовать что-то вроде:

LINE=$(rlwrap head -n1) 

который будет использовать файл ~/.head_historyпо умолчанию. ( man rlwrapдля более подробной информации, включая опции для указания имени файла истории.)

Другой возможностью является запуск readв подоболочке с HISTFILEустановленным вашим собственным файлом истории, но вам нужно будет проделать гораздо больше работы, поскольку, хотя и read -e использует историю, она не обновляет ее. Так что вам, вероятно, понадобится что-то вроде:

LINE=$(bash -c 'HISTFILE=/path/to/history_file; history -r; read -e LINE; history -s "$LINE"; history -w; echo "$LINE"') 
Да!! У меня есть `rlwrap`. Он уже установлен на моей установке Fedora 20. Оно работает! BenjiWiebe 10 лет назад 0

Похожие вопросы