如何保存 mnesia:info() 输出?
我在 unix 屏幕中使用远程 sh 并且无法滚动窗口
如果您位于没有滚动的终端(如果您在 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 <===
...
这是一个可以放在远程节点上的 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").
我相信你做不到。请参阅 system_info(all)。
转换为字符串:
S = io_lib:format("~p~n", [mnesia:info()]).
然后将其写入磁盘。