我知道我可以运行tmux -V来找到我的PATH中的tmux版本,但是我如何才能得到当前运行的tmux版本呢?
tmux -V
PATH
tmux
最明显的,但不是100%正确的方法是在控制台执行这个命令
$ tmux -V
和接收输出像这样tmux 2.9a版本的tmux已安装,当前没有运行。 在99%的情况下,这就足够了,但可能会有细微的差别 命令tmux -V将返回安装在/usr/bin/tmux或PATH变量内任何其他目录下的tmux版本。如果tmux已经在运行,那么tmux可以从其他版本的二进制文件和不同的位置启动(例如,tmux可以从/home/user/bin/tmux启动)。 在这种情况下,您必须调用
tmux 2.9a
/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
/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运行该文件。
-V
如果它导致文件“(已删除)”,则您正在运行旧的、已卸载的版本。如果你在linux上,你可以通过运行:
/proc/$tmuxPID/exe -V`
如果你使用的是OS X系统,你只能使用文件名路径中的任何信息,可能是类似Cellar/tmux/<version number>/bin/tmux的东西。
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
proc_pidpath