【问题标题】:How to search `iex` or `erl` shell history?如何搜索 `iex` 或 `erl` shell 历史记录?
【发布时间】:2019-12-24 00:56:12
【问题描述】:

我可以使用相应的箭头键上下移动历史记录,但是对于大型历史记录来说这很麻烦,而且CTRL-R 似乎不起作用。

查看了Erlang's shell moduleElixir's IEx module 文档,但他们没有提及任何关于此的内容。后者至少告诉how to enable it

可以通过传递一些选项来获取 shell 历史记录 在虚拟机中启用它。这可以在每个需要的基础上完成 开始IEx:

iex --erl "-kernel shell_history enabled"

如果您希望在整个系统上启用它,您可以使用 ERL_AFLAGS 环境变量并确保已设置 相应地在您的终端/外壳配置上。

在类 Unix / Bash 上:

export ERL_AFLAGS="-kernel shell_history enabled"

在 Windows 上:

set ERL_AFLAGS "-kernel shell_history enabled"

在 Windows 10 / PowerShell 上:

$env:ERL_AFLAGS = "-kernel shell_history enabled"

【问题讨论】:

    标签: erlang-shell elixir-iex


    【解决方案1】:

    引用Erlang patches mailing list中所说的话

    可以通过按 ctrl-r 进入搜索模式。输入条款并按 再次按 ctrl-r 向后搜索,或按 ctrl-s 然后向前搜索(如果 你的终端不会吃掉那个)。

    值得注意的是,OP 提到 ctrl-r 不起作用,并且链接的消息对 Windows 环境也有同样的说法。根据环境的不同,此功能似乎有一些注意事项。

    很难详细说明 OP 的情况,但 FWIW,该功能确实按照 macOS 10.14、iTerm2 和 Elixir 1.10.4-otp-22 中的描述工作。

    【讨论】:

      【解决方案2】:

      快速而肮脏的解决方案:

      1. 由于可以通过 Erlang 的 kernel 标志启用历史记录,因此在 the kernel docs 中找到了以下标志:

        shell_history = enabled | disabled
        指定是否 shell 历史 应该在使用 erl 之间记录到磁盘。

        shell_history_drop = [string()]
        不应该的特定日志行 被坚持。例如["q().", "init:stop()."] 将允许 忽略关闭节点的命令。默认为[]

        shell_history_file_bytes = integer()
        shell 有多少字节 应该记住。默认情况下,该值设置为 512kb,并且 最小值为 50kb。

        shell_history_path = string()
        指定 shell 历史记录的位置 文件将被存储。默认为用户的缓存目录 由filename:basedir(user_cache, "erlang-history")返回。

      2. iex中查找shell历史文件的路径

        iex(27)> :filename.basedir(:user_cache, "erlang-history")             
        "/home/user/.cache/erlang-history"
        
      3. 在系统外壳中使用less

        $ ll /home/user/.cache/erlang-history/
        total 100
        drwxr-xr-x  2 user users  4096 Aug 18 07:59 ./
        drwxr-xr-x 14 user users  4096 Aug  2 15:52 ../
        -rw-r--r--  1 user users 52415 Aug 10 08:13 erlang-shell-log.1
        -rw-r--r--  1 user users 29992 Aug 18 08:00 erlang-shell-log.2
        -rw-r--r--  1 user users    26 Aug 18 07:59 erlang-shell-log.idx
        -rw-r--r--  1 user users    13 Aug 18 07:59 erlang-shell-log.siz
        
        $ less /home/user/.cache/erlang-history/erlang-shell-log.1
        "/home/user/.cache/erlang-history/erlang-shell-log.1" may be a binary file.  
        See it anyway?
        # Hit y
        

      我确定有更复杂的方法,但没有时间探索它们,也找不到任何可以专门从iex(或erl)查询历史的项目)。

      【讨论】:

        猜你喜欢
        • 2018-01-06
        • 2014-04-21
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 2018-12-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-25
        相关资源
        最近更新 更多