私は Elixir を使い始めたばかりで、iex
シェルをかなり使用しています。「セッション」をファイルに保存/記録することはできますか?
ありがとうございました。
Erlang/OTP-20rc2 以降、このライブラリの Erlang/OTP コード ベースへのポートを通じて、シェルの履歴がすぐにサポートされます (ただし、最初はデフォルトで無効になっています) 。環境変数に追加して
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
現在、Erlang ベースの REPL (およびそれが IEx) を開始するたびに、 を使用する必要がありますerlang-history
。
別の方法として、 「readline ラッパー」である、より一般的な REPL エンハンサー/フィクサーrlwrapを試すことができます。
...GNU readline ライブラリを使用して、任意のコマンドのキーボード入力を編集できる小さなユーティリティ。
rlwrap -a -A iex -S mix
(Ubuntu Linux を使用している場合: sudo apt-get install rlwrap
)
これにより、REPL にさらに多くの機能を追加rlwrap -a -z pipeto iex
できます。たとえば、パイプをシェル コマンドに渡すことができる pipeto フィルターなどです。ドキュメントを読むのに非常にiex> h Stream | less
便利です。
欠点を知る:
この非常に便利な機能 (コマンド履歴) が Elixir/Erlang にまだ含まれていないのはなぜですか?
現在ありません。ただし、これを行うために小さな 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
. おそらく、現在のシェルの履歴をファイルに保存するために何かを書き、起動時にそれを読み戻すことができますが、どこから始めればよいかわかりません。