Похоже, что просто использование параметра задержки в элементах автозагрузки не работает. Я поступил точно так же, как в этом сообщении , и использую:
bash -c "sleep 30; xmodmap ~ / Documents / loadScripts / Xmodmap"
вместо задержки. Однако это не очень элегантно, так как я понятия не имею, почему это работает. Таким образом, я надеюсь принять ответ, который будет немного менее сложным.
Нет, это неправда.
Если $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
(обычно ).
Один момент. KSH по умолчанию не принимает клавиши со стрелками для перебора истории команд.
См. этот вопрос:
Из ответа Тима:
Для клавиш со стрелками вы можете поместить это в свой файл .kshrc [(
pdksh
иmksh
оба используют.mkshrc
, а не.kshrc
)] в вашем домашнем каталоге:
set -o emacs
alias __A=`echo "\020"` # up arrow = ^p = back a command
alias __B=`echo "\016"` # down arrow = ^n = down a command
alias __C=`echo "\006"` # right arrow = ^f = forward a character
alias __D=`echo "\002"` # left arrow = ^b = back a character
alias __H=`echo "\001"` # home = ^a = start of line
alias __Y=`echo "\005"` # end = ^e = end of line
Обратите внимание, что перед буквами слева от знака равенства есть два символа подчеркивания. В правой части равенства цель состоит в том, чтобы получить правильный управляющий символ, назначенный псевдониму. Способ, которым этот сценарий делает это, заключается в запуске команды (через обратные тики)
echo "\020"
, чтобы получить символ управления-n, назначенный на __B.
РЕДАКТИРОВАТЬ (спасибо, mirabilos): я удалил материал с обратных кавычек во время поиска. Я был введен в заблуждение этим:
Убедитесь, что ваша переменная $HISTFILE
env указывает на файл, и все готово.
У меня есть pdksh
, из справочной страницы :
ПРИМЕЧАНИЕ: если HISTFILE не установлен, файл истории не используется. Это отличается от исходной оболочки Korn, в которой используется $HOME/.sh_history; в будущем pdksh может также использовать файл истории по умолчанию.
Для mksh
это тот же:
Примечание: Если HISTFILE не установлен, файл истории не используется. Этот отличается от AT&T UNIX ksh.
Обратите внимание, что мой pdksh
и мой mksh
используют $HOME/.mkshrc
как файл .kshrc
. Опять же, вопрос о RTFM ( man ksh
), ваша реализация может использовать другую. (спасибо Кусалананде за намек на это).
Кстати, вы можете легко преобразовать историю ksh в bash_history, используя команду strings
и sed для очистки следующим образом:
strings
Я думаю, что происходит то, что из bash вы привыкли использовать стрелки для доступа к командам истории. Это, AFAIK, не включено в KSH (, если вы не пройдете циклы, чтобы это произошло ), если вы не «установите -o vi», и в этом случае вы можете использовать перемещение курсора vi и клавиши редактирования текста, т.е. :