Tmux:如何找到当前运行的Tmux版本?

我知道我可以运行tmux -V来找到我的PATH中的tmux版本,但是我如何才能得到当前运行tmux版本呢?

129988 次浏览

最明显的,但不是100%正确的方法是在控制台执行这个命令

$ tmux -V

和接收输出像这样tmux 2.9a版本的tmux已安装,当前没有运行。 在99%的情况下,这就足够了,但可能会有细微的差别 命令tmux -V将返回安装在/usr/bin/tmux或PATH变量内任何其他目录下的tmux版本。如果tmux已经在运行,那么tmux可以从其他版本的二进制文件和不同的位置启动(例如,tmux可以从/home/user/bin/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版本,而不是已安装的版本。

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

pgrep tmux

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

lsof -p $tmuxPID | grep REG | grep -i -e deleted -e "tmux$"

如果列出的tmux文件旁边没有(已删除),则可以使用-V运行该文件。

如果它导致文件“(已删除)”,则您正在运行旧的、已卸载的版本。如果你在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

正如注释中指出的,tmux -V返回版本:

$ tmux -V
tmux 3.0a

在Centos 7和OSX 12.5上测试。

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

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

将显示服务器的版本(在我的例子中是2.7)

-p将指导stdout的输出,以便您可以使用它编写脚本,{version}可以是手册页中的格式部分中的任何内容。

下面将为您提供tmux服务器的可执行文件,在linux上:

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

在macos上,可以使用proc_pidpath,参见https://stackoverflow.com/a/8149380