如何保存/记录iex shell的输出以获得持久的命令历史记录?

如何保存/记录iex shell的输出以获得持久的命令历史记录?,shell,elixir,Shell,Elixir,我刚开始使用Elixir,并且一直在使用iexshell。我是否可以将“会话”保存/记录到文件中 谢谢。目前没有。不过,您可以编写一个小的iex插件来为您实现这一点。例如,我在~/.iex.exs中有以下文件: # .iex.exs defmodule IExHelpers do def reload! do Mix.Task.reenable "compile.elixir" Mix.Task.run "compile.elixir" end end iex = IE

我刚开始使用Elixir,并且一直在使用
iex
shell。我是否可以将“会话”保存/记录到文件中


谢谢。

目前没有。不过,您可以编写一个小的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-SMIX生成的shell中。您可以编写一些东西将当前shell的历史记录保存到一个文件中,并在启动时将其读回,但我不确定从何处开始。

在Erlang/OTP-20及更高版本中 自Erlang/OTP-20rc2以来,Shell历史记录通过到Erlang/OTP代码库的端口获得开箱即用的支持(尽管最初默认情况下是禁用的)。通过将
shell\u history
内核环境变量设置为enabled,并将
export ERL\u AFLAGS=“-kernel shell\u history enabled”
添加到您的环境变量中来启用这些版本中的shell(请参阅以查看更多选项)

--

故障排除 历史记录似乎未更新(未写入文件)? 似乎将历史记录写入文件的进程是异步进行的,并且在关闭IEx外壳之前需要一些时间来完成。您需要等待一段时间才能退出shell(例如,按


预Erlang/OTP-20: 我找到了两种方法

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
现在,每一个现在启动的基于Erlang的REPL(即IEx)都应该使用
ErlangHistory


2. 作为替代方案,您可以尝试一种更通用的REPL增强器/修复器,它是一种“readline包装器”:

…一个使用GNU readline库允许 编辑任何命令的键盘输入

(如果您使用的是Ubuntu Linux,请使用:
sudo-apt-get-install-rlwrap

它可以让您向REPL添加更多功能,例如pipeto过滤器
rlwrap-a-z pipeto iex
,它可以将内容通过管道传输到shell命令-对于阅读文档非常有用,例如:
iex>h Stream | less
()

了解缺点:

  • 它打破了IEx中的代码完成(即制表符完成)

为什么Elixir/Erlang中还没有包含这个非常有用的特性(命令历史记录)



使用时请参阅。

非常有趣。谢谢。这与运行
r ModuleName
有何不同?它会重新编译整个应用程序吗?谢谢你的研究。在OSX上使用
erlang history
似乎效果很好。我已经更新了答案,将
erlang/OTP-20
中在本主题中取得的进步包括在内。现在让它工作起来容易多了。
rlwrap -a -A iex -S mix