如何保存/记录iex shell的输出以获得持久的命令历史记录?
我刚开始使用Elixir,并且一直在使用如何保存/记录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
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