Как сохранить/зарегистрировать вывод оболочки iex для получения постоянной истории команд?
Я только начал работать с Elixir и довольно часто использовал оболочку iex
. Возможно ли сохранить/записать "сеанс" в файл?
Спасибо.
Ответы
Ответ 1
В настоящее время нет. Возможно, вы могли бы написать небольшой плагин iex, чтобы сделать это для вас. Например, у меня есть следующий файл в ~/.iex.exs
:
# .iex.exs
defmodule IExHelpers do
def reload! do
Mix.Task.reenable "compile.elixir"
Mix.Task.run "compile.elixir"
end
end
iex = IExHelpers
# $ iex -S mix
# iex(2)> iex.reload!
# :noop
Это перекомпилирует текущий проект и перезагружает его, пока он находится внутри оболочки, созданной с помощью iex -S mix
. Возможно, вы могли бы написать что-нибудь, чтобы сохранить текущую историю оболочки в файл и прочитать ее при запуске, но я не уверен, где вы начнете с этого.
Ответ 2
В Эрланге/ОТП-20 и выше
Начиная с Erlang/OTP-20rc2, история оболочки поддерживается "из коробки" (хотя изначально она по умолчанию отключена) через порт этой библиотеки к базе кода Erlang/OTP. Включите оболочку в этих версиях, установив для shell_history
среды ядра shell_history
значение включенного с export ERL_AFLAGS="-kernel shell_history enabled"
в переменные среды (см. " Параметры конфигурации" для просмотра дополнительных параметров).
- https://github.com/ferd/erlang-history
Поиск неисправностей
История, кажется, не обновляется (не записывается в файл)?
Кажется, что процесс, который записывает историю в файл, делает это асинхронно, и ему нужно некоторое время, чтобы сделать это до закрытия оболочки IEx. Вам нужно немного подождать, прежде чем выйти из оболочки (например, нажать <ctrl+\>
).
Pre Erlang/OTP-20:
Я нашел 2 способа сделать это.
erlang-history (eh) - это крошечная пара файлов, которые можно использовать для исправления системы Erlang-OTP для добавления поддержки истории в оболочке Erlang.
Поддерживаемая история доступна через стрелки вверх/вниз на клавиатуре.
Установка в Ubuntu Linux:
sudo su
cd /usr/local/src
git clone https://github.com/ferd/erlang-history.git
cd erlang-history
make install
Теперь каждый теперь запущенный REPL на основе Erlang (а это IEx) должен использовать erlang-history
.
В качестве альтернативы вы можете попробовать более общий rlwrap для улучшения/исправления REPL, который является "оболочкой readline":
... небольшая утилита, которая использует библиотеку GNU readline, чтобы разрешить редактирование ввода с клавиатуры для любой команды.
rlwrap -a -A iex -S mix
(Если вы используете Ubuntu Linux, используйте: sudo apt-get install rlwrap
)
Он позволяет добавить намного больше возможностей в REPL, например, фильтр rlwrap -a -z pipeto iex
который позволяет rlwrap -a -z pipeto iex
в команды оболочки - очень полезно для чтения документации, например: iex> h Stream | less
iex> h Stream | less
(больше)
Знай минусы:
- Это нарушает завершение кода (т.е. завершение табуляции) в IEx
Почему эта очень полезная функция - история команд - еще не включена в Elixir/Erlang?
При использовании asdf
смотрите это.