1

如何保存 mnesia:info() 输出?

我在 unix 屏幕中使用远程 sh 并且无法滚动窗口

4

4 回答 4

1

如果您位于没有滚动的终端(如果您在 xterm 上并且看不到滚动条,只需将其打开)一个非常有用的工具是screen:它提供虚拟 vt100 终端,您可以在终端之间切换甚至与它分离稍后再回来(对于需要偶尔交互的远程服务器上长时间运行的程序来说很好)。

您可以将脚本记录到文件中并在虚拟终端的输出中滚动。

如果您使用的是类似 Unix 的系统,您可能只需要安装一个预构建的包,如果一切都失败了,您可以随时获取源代码并自己构建它。

另请参阅本文以获取其他解决方案。

如果你不能在系统上安装screen,一个简单但不是很舒服的只使用 Unix 内置东西的黑客是:

使用tee(1)启动 erlang shell以重定向输出:

$ erl | tee output.log
Eshell V5.7.5  (abort with ^G)
1> mnesia:info().
===> System info in version {mnesia_not_loaded,nonode@nohost,
                                {1301,742014,571300}}, debug level = none <===
opt_disc. Directory "/usr/home/peer/Mnesia.nonode@nohost" is NOT used.
use fallback at restart = false
running db nodes   = []
stopped db nodes   = [nonode@nohost] 
ok
2>    

退出 shell 有点困难(您可能必须键入^D才能结束输入文件),但是文件中有 tty 输出:

$ cat output.log 
Eshell V5.7.5  (abort with ^G)
1> ===> System info in version {mnesia_not_loaded,nonode@nohost,
                                {1301,742335,572797}}, debug level = none <===
...
于 2011-04-02T11:15:21.907 回答
1

这是一个可以放在远程节点上的 user_default.erl 模块中的函数:

  out(Fun, File) ->
    G = erlang:group_leader(),
    {ok, FD} = file:open(File, [write]),
    erlang:group_leader(FD, self()),
    Fun(),
    erlang:group_leader(G, self()),
    file:close(FD).

然后,您可以执行以下操作(在重新编译和加载 user_default 之后):

  1> out(fun () -> mnesia:info() end, "mnesia_info.txt").

或者,只需将以下内容剪切并粘贴到外壳中:

  F = fun (Fun, File) ->
        G = erlang:group_leader(),
        {ok, FD} = file:open(File, [write]),
        erlang:group_leader(FD, self()),
        Fun(),
        erlang:group_leader(G, self()),
        file:close(FD)
      end,
  F(fun () -> mnesia:info() end, "mnesia_info.txt").
于 2011-04-02T11:19:55.213 回答
-1

我相信你做不到。请参阅 system_info(all)。

于 2011-04-02T02:42:31.167 回答
-1

转换为字符串:

S = io_lib:format("~p~n", [mnesia:info()]).

然后将其写入磁盘。

于 2011-04-02T03:06:06.537 回答