我刚刚开始使用Elixir并且一直在使用iex
shell。我可以将“会话”保存/记录到文件中吗?
谢谢。
答案 0 :(得分:40)
自Erlang / OTP-20rc2以来,Shell历史记录支持开箱即用(尽管最初默认禁用),通过this library端口支持Erlang / OTP代码库。通过将
shell_history
内核环境变量设置为启用并在环境变量中添加export ERL_AFLAGS="-kernel shell_history enabled"
来启用这些版本的shell(请参阅Configuration Options以查看更多选项)。
- https://github.com/ferd/erlang-history
似乎将历史记录写入文件的过程是异步执行的,并且在IEx shell关闭之前需要一些时间来完成它。退出shell之前需要稍等一下(例如按<ctrl+\>
)。
我找到了两种方法。
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
。
作为替代方案,您可以尝试使用更通用的REPL增强器/修复程序rlwrap,这是一个&#34; readline包装器&#34;:
...一个小实用程序,它使用GNU readline库来允许 编辑任何命令的键盘输入。
rlwrap -a -A iex -S mix
(如果您使用的是Ubuntu Linux,请使用:sudo apt-get install rlwrap
)
您可以在REPL中添加更多功能,例如: pipeto过滤器rlwrap -a -z pipeto iex
,它允许你将东西传递给shell命令 - 阅读文档非常有用,例如:iex> h Stream | less
(more)
了解缺点:
为什么这个非常有用的功能 - 命令历史记录 - 还没有包含在Elixir / Erlang中?
答案 1 :(得分:9)
目前不是。你可以写一个小的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
生成的shell中。您可能会编写一些内容来将当前shell的历史记录保存到文件中,并在启动时将其读回来,但我不确定从哪里开始。