Tmux:我如何找出当前运行的tmux版本?

218

我知道我可以运行 tmux -V 命令来查找在我的 PATH 路径下的 tmux 版本,但是如何获取当前正在运行的 tmux 版本呢?

5个回答

211

如评论中所指出的,tmux -V 命令会返回版本信息:

$ tmux -V
tmux 3.0a

在Centos 7和OSX 12.5上进行了测试。


19
我认为这并没有回答问题。我不确定为什么评分如此之高。那个命令只会返回我路径中的tmux版本。 - quant
9
因为这是“如何获取tmux版本”的第一搜索结果。 - Derek 朕會功夫
5
这是错误的!正确答案来自用户whatintheworld。 - iconoclast
1
@ssi-anik:看起来它是有效的。该开关是在某个特定时间点添加的,因此它开始工作以显示您在PATH中找到的第一个安装版本,这不一定与您正在运行的版本相同。随着时间的推移,您越来越不可能遇到不支持“-V”的tmux版本,并且大多数时候您不太可能运行一个版本并拥有另一个出现在PATH中的版本。但是,如果您确实想要知道当前运行的版本,则这不可靠,原因有两个。 - iconoclast
6
既然问题本身提到了"-V"不可接受,那么为什么您认为这个回答能回答问题?它明确将其排除在答案之外! - iconoclast
显示剩余2条评论

153

最显而易见但不完全正确的方法是在控制台执行此命令

$ tmux -V

您将会收到类似于这样的输出:tmux 2.9a,其中包含已安装的 tmux 版本,而不是当前正在运行的版本。 在99%的情况下,这已经足够了,但有时候可能存在微妙的细微差别。

命令tmux -V将返回 /usr/bin/tmux 或其他目录中已安装的 tmux 的版本。如果您已经运行了 tmux,则可能会从其他版本的二进制文件和不同位置(例如,可以从 /home/user/bin/tmux启动 tmux)启动 tmux。 在这种情况下,您需要调用

$ ps  -e | grep tmux

查看当前所有运行的tmux进程的PID。它将输出类似以下内容:
[vodolaz095@ivory ~]$ ps -e | grep tmux
19699 pts/0    00:00:00 tmux: client
19701 ?        00:00:00 tmux: server

这里的编号19701表示当前正在运行的tmux服务器的进程ID(PID)。

获取tmux服务器的PID后,您可以运行命令:


$ lsof -p 19701

获取有关当前正在运行的 tmux 服务器进程的信息(在我的情况下是19701),将输出类似于以下内容的结果(图1):

COMMAND     PID       USER   FD   TYPE             DEVICE  SIZE/OFF     NODE NAME
tmux:\x20 19701 vodolaz095  cwd    DIR               8,33      4096 22544385 /home/vodolaz095
tmux:\x20 19701 vodolaz095  rtd    DIR                8,1      4096        2 /
tmux:\x20 19701 vodolaz095  txt    REG                8,1    677760  3675332 /usr/bin/tmux
tmux:\x20 19701 vodolaz095  mem    REG                8,1   6406312   131327 /var/lib/sss/mc/group

正如您所见,当前运行的tmux是从位于/usr/bin/tmux的二进制文件中执行的。

或者,您可以调用一个一行命令:


    lsof -p `pgrep 'tmux: server'`


为了达到与图1相同的输出结果
获取当前运行tmux二进制文件的路径后(在我的情况下,路径为/usr/bin/tmux),你可以使用-V标志执行该二进制文件以获取其版本。

/usr/bin/tmux -V

或者,如果 tmux 是由有限用户安装到 /home/user/bin/tmux 中的,则可以执行以下操作:


/home/user/bin/tmux -V

因此,您将得到当前正在运行的 tmux 版本,而不是安装的版本。


9
值得一提的是,如果自给定进程开始以来tmux已经升级,则此方法将无效。 - nobody
3
在MacOSX中出现了一个错误:ps: option requires an argument -- u - alexserver
59
在Ubuntu和OSX上测试,只需运行“tmux -V”。 - Mauricio Poppe
2
这种方法需要您先执行tmux;相反,您可以使用“which tmux”来查找路径。 - willowherb
2
这是错误的!正确答案来自用户whatintheworld。 - iconoclast
显示剩余3条评论

26

要获取tmux 服务器的版本,您可以使用display-message命令。


./tmux2.3 display-message -p "#{version}"

将显示服务器版本(在我的情况下为2.7)

-p将指导stdout的输出,因此您可以使用它进行脚本编写,{version}可以是man页面中FORMATS部分的任何内容。

以下内容将为您提供Linux上tmux服务器的可执行文件:

realpath /proc/$(tmux display-message -p "#{pid}")/exe

在 macOS 上可以使用 proc_pidpath 命令,详情请参见 https://dev59.com/IXRA5IYBdhLWcg3w2x6W#8149380


“/proc”黑客技巧仅适用于Linux(可能也适用于Solaris等系统,但通常不可移植)。 - tripleee
display-message 是获取服务器版本的完美解决方案! - Ben Bernard
4
在运行的tmux客户端中,您可以执行:display-message -p "#{version}" - Epimetheus
3
@quant 应该是被选中的答案,因为使用"display-message"方法实际上返回正在运行的tmux版本,正如所指出的,如果在启动实例后进行更新,则该版本可能与当前安装的版本不同。虽然我只是在tmux本身中使用"<prefix>:"而不是调用二进制文件来运行"display-message -p "#{version}"。 - MemphiZ
1
在macOS上,/proc/无法使用,但是可以使用proc_pidpath(如果需要,可以将其包装成可执行文件以从bash中调用),请参见https://dev59.com/IXRA5IYBdhLWcg3w2x6W#8149380。 - timotheecour
注意:tmux 客户端和服务器版本不匹配时,tmux display-message -p "#{pid}" 命令可以立即工作,但尝试捕获 $() 或将其管道 | 到另一个命令可能会输出正确答案,然后永久挂起! 对于我来说(CentOS 4.1 正常运行时间超过 400 天),ls -l /proc/13802/exe --> /usr/bin/tmux;60a77fb0 (已删除)。 旧版:/proc/13802/exe -V ## 3.1b。 新版:/usr/bin/tmux -V ## 3.2atmux display-message -p "#{pid}" | cat <-- 挂起直到 ^C。 echo $(tmux display-message -p "#{pid}")/exe <-- ^C 没有任何作用。 - DouglasDD

16

要找到正在运行的tmux的实际版本,您必须找到tmux的PID:

pgrep tmux

有了这些信息,您可以通过运行以下命令来检查版本:

lsof -p $tmuxPID | grep REG | grep -i -e deleted -e "tmux$"
如果在 tmux 文件旁边没有“(deleted)”字样,您可以直接使用-V运行该文件。

如果结果显示为“(deleted)”文件,则表示您正在运行旧版本或未安装的版本。如果您使用的是Linux系统,可以通过运行以下命令来确定它是什么:
/proc/$tmuxPID/exe -V`

如果您使用的是OS X操作系统,您只能使用文件路径中所包含的信息,例如 Cellar/tmux/<version number>/bin/tmux

您可以将许多步骤合并为以下一行命令:

for tmuxPID in $(pgrep tmux); do lsof -p $tmuxPID | grep REG | grep -i -e deleted -e "tmux$"; done

或者如果您正在使用Linux,这个方法总是有效的:

for tmuxPID in $(pgrep tmux); do /proc/$tmuxPID/exe -V; done

5

发送前缀(默认为ctrl-B),然后输入:

:display-message "#{version}"

这将在状态栏中显示版本号


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接