Я хотел бы написать интерактивную командную оболочку в сценарии оболочки для упрощения настройки брандмауэра 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"')