3

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

1 ответ1

3

Если у вас есть 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"')

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .