Подтвердить что ты не робот

Как сохранить/зарегистрировать вывод оболочки iex для получения постоянной истории команд?

Я только начал работать с Elixir и довольно часто использовал оболочку iex. Возможно ли сохранить/записать "сеанс" в файл?

Спасибо.

4b9b3361

Ответ 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 способа сделать это.

1. История Эрланга

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.


2. обертывание

В качестве альтернативы вы можете попробовать более общий 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 смотрите это.