Я хотел бы написать интерактивную командную оболочку в сценарии оболочки для упрощения настройки брандмауэра iptables. Проблема в том, что read -e использует историю оболочки . Есть ли способ использовать отдельную историю для read -e в сценарии?
3
 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"')
