Нет, это неправда.
Если $HISTFILE
является именем файла, то история сеанса будет храниться в этом файле. Это объясняется в руководстве. Количество команд, запоминаемых в истории оболочки, ограничено значением $HISTSIZE
.
Я считаю, что история сбрасывается в файл после выполнения каждой команды, в отличие от bash
, который сбрасывает историю в файл по завершении сеанса оболочки. Это может зависеть от того, какую реализацию ksh
вы используете.
Установите HISTFILE
на имя файла в вашем ~/.profile
файле (, который читается оболочками входа в систему ), или в файле, на который указывает $ENV
(, который читается интерактивными оболочками и имеет значение по умолчанию. из $HOME/.kshrc
вksh93
). $HISTSIZE
по умолчанию 500 или 512 или около того, в зависимости от используемой вами реализации ksh
. Ни одну из этих переменных не нужно экспортировать. Файл истории не обязательно должен существовать перед этим.
В комментариях вы упомянули, что некоторые клавиши перемещения Emacs и редактирования в командной строке не работают. Это потому, что оболочка не находится в режиме редактирования Emacs. Либо установите для переменнойEDITOR
(илиVISUAL
)значение emacs
, либо используйте set -o emacs
, чтобы включить режим редактирования командной строки Emacs. Это также объясняется в руководстве. Эти переменные также не нужно экспортировать, если только вы не хотите, чтобы их использовали другие программы, кроме оболочки.
Резюме:
В вашем $HOME/.profile
файле:
export ENV="$HOME/.kshrc"
В вашем $HOME/.kshrc
файле:
HISTFILE="$HOME/.ksh_history"
HISTSIZE=5000
export VISUAL="emacs"
export EDITOR="$VISUAL"
set -o emacs
Это было тщательно протестировано на OpenBSD как с ksh93
, так и с pdksh
(, то есть ksh
на OpenBSD ). Я не использую mksh
, но поскольку это производная от pdksh
, я думаю, что это будет работать и с этой оболочкой.
Обратите внимание , что pdksh
,ksh93
(иbash
)не могут совместно использовать файл истории , так как они имеют разные форматы истории.
Обычно это не проблема, если у вас есть отдельные файлы инициализации для bash
и ksh
, например. .bash_profile
и .bashrc
для bash
и .profile
и .kshrc
дляksh
(с export ENV="$HOME/.kshrc"
в .profile
). Вы можете дополнительно различать различные ksh
реализации, взглянув на$KSH_VERSION
(обычно ).
Если это должно быть awk
, просто сделайте:
awk -- '/AAA/,/BBB/{print}'
Но кажется, что sed
идеально подойдет и для вашего случая. Итак, аналогично просто делаем:
sed -ne '/AAA/,/BBB/p'
В обеих командах используйте запятую, чтобы указать, что вы хотите рассмотреть все строки, начиная с (и включая )строку, соответствующую первому шаблону, до (и включая )строку, соответствующую первому шаблону. второй узор.