Я только начал работать с Elixir и довольно часто использовал оболочку iex
. Возможно ли сохранить/записать "сеанс" в файл?
Спасибо.
Я только начал работать с Elixir и довольно часто использовал оболочку iex
. Возможно ли сохранить/записать "сеанс" в файл?
Спасибо.
В настоящее время нет. Возможно, вы могли бы написать небольшой плагин 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
. Возможно, вы могли бы написать что-нибудь, чтобы сохранить текущую историю оболочки в файл и прочитать ее при запуске, но я не уверен, где вы начнете с этого.
Начиная с Erlang/OTP-20rc2, история оболочки поддерживается "из коробки" (хотя изначально она по умолчанию отключена) через порт этой библиотеки к базе кода Erlang/OTP. Включите оболочку в этих версиях, установив для
shell_history
среды ядраshell_history
значение включенного сexport ERL_AFLAGS="-kernel shell_history enabled"
в переменные среды (см. " Параметры конфигурации" для просмотра дополнительных параметров).
- https://github.com/ferd/erlang-history
Кажется, что процесс, который записывает историю в файл, делает это асинхронно, и ему нужно некоторое время, чтобы сделать это до закрытия оболочки IEx. Вам нужно немного подождать, прежде чем выйти из оболочки (например, нажать <ctrl+\>
).
Я нашел 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
(больше)
Знай минусы:
Почему эта очень полезная функция - история команд - еще не включена в Elixir/Erlang?