当我在给定环境中进行更改时,我大量使用屏幕的“log”命令将会话的输出记录到文件中。我搜索了 tmux 的手册页,但找不到等效的内容。有谁知道 tmux 中有类似的功能,还是我必须编写自己的包装脚本才能做到这一点?
编辑:我知道“脚本”和其他实用程序允许我记录会话。 screen 的功能如此有用的原因是能够定义一个日志文件变量,该变量使用字符串转义来唯一标识每个会话。
例如,我有一个 shell 函数,给定主机名,它将在新的屏幕窗口中通过 SSH 连接到该主机,并将窗口标题设置为主机名。当我启动该会话的日志时,它会以窗口标题为前缀。
如果 tmux 中不存在此功能,我将不得不创建一组新的 shell 函数来设置我想要记录的会话的“脚本”。这并不是非常困难,但考虑到屏幕已经完全满足了我的需要,这可能不值得付出努力。
答案1
让我看看我是否破译了你的屏幕正确配置:
- 您可以使用类似的内容
logfile "%t-screen.log"
(可能在.screenrc
文件中)来配置稍后启动的日志文件的名称。 - 您使用
title <hostname>
(Ca A)屏幕命令设置新窗口的标题,或者
启动screen -t <hostname> ssh0 <hostname>
新的屏幕会话。 - 您使用 Ca H (Ca :log)屏幕命令将日志记录切换到配置的文件。
如果是这样,那么几乎是等价的(需要多路复用器1.3+ 支持pipe-pane
shell 命令中的#W;pipe-pane
可用于多路复用器1.0+):
在配置文件中(例如
.tmux.conf
):bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'"
- 使用
tmux rename-window <hostname>
(Cb ,) 重命名现有窗口,或
使用tmux new-window -n <hostname> 'ssh <hostname>'
启动新窗口多路复用器窗口,或
用于tmux new-session -n <hostname> 'ssh <hostname>'
开始一个新的多路复用器会议。 - 使用 Cb H 切换日志记录。
没有通知表明日志已切换,但如果需要,您可以添加一个:
bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Toggled logging to $HOME/#W-tmux.log'
注意:上面的行显示为好像在配置文件中(或者.tmux.conf
您自己的source
)。多路复用器需要同时看到反斜杠和分号;如果您想从 shell 进行配置(例如tmux bind-key …
),那么您必须适当地转义或引用这两个字符,以便将它们传递到多路复用器完好无损的。当仅使用单个绑定时,似乎没有一种方便的方法来显示用于切换开/关的不同消息(您可能可以使用 来装配一些东西if-shell
,但它可能会很难看)。如果两个绑定都可以接受,请尝试以下操作:
bind-key H pipe-pane "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Started logging to $HOME/#W-tmux.log'
bind-key h pipe-pane \; display-message 'Ended logging to $HOME/#W-tmux.log'
答案2
这是一个 tmux 插件,可以在不弄乱 中的键绑定的情况下进行日志记录.tmux.conf
:
https://github.com/tmux-plugins/tmux-logging
特征:
prefix + P
切换窗格日志记录。输出中已清除不需要的 ANSI 字符!prefix + Alt + P
将完整的窗格历史记录保存到文件中
答案3
查看 tmux 的文档后,我找不到任何与屏幕窗口日志记录等效的内容。看起来您必须使用 shell 函数来做您想做的事情,或者只使用 screen。您可以打开调试,它会记录服务器端和客户端,但它还包含许多无关的 tmux 相关日志,因此它不完全是您所要求的。
您可以使用 tmux 的剪贴板自动将缓冲区保存到另一个会话,该会话将设置为接受剪贴板的内容并保存到文件。这看起来有点hackish。
答案4
您可以使用pipe-pane
命令在前缀之后tmux
(带有默认前缀,这将是CTRL+ b:pipe-pane
)。
实施例1
发现的例子这里将覆盖目标文件(在本例中为myfile
):
pipe-pane "cat >myfile"
实施例2
tmux
手册中的例子将绑定一个组合键来切换日志记录并附加到指定的文件而不是覆盖它:
该
-o
选项仅在不存在先前管道的情况下打开新管道,允许使用单个键切换管道,例如:bind-key C-p pipe-pane -o 'cat >>~/output.#I-#P'