我知道我可以运行 tmux -V
命令来查找在我的 PATH
路径下的 tmux
版本,但是如何获取当前正在运行的 tmux
版本呢?
我知道我可以运行 tmux -V
命令来查找在我的 PATH
路径下的 tmux
版本,但是如何获取当前正在运行的 tmux
版本呢?
如评论中所指出的,tmux -V
命令会返回版本信息:
$ tmux -V
tmux 3.0a
在Centos 7和OSX 12.5上进行了测试。
最显而易见但不完全正确的方法是在控制台执行此命令
$ tmux -V
您将会收到类似于这样的输出:tmux 2.9a
,其中包含已安装的 tmux 版本,而不是当前正在运行的版本。
在99%的情况下,这已经足够了,但有时候可能存在微妙的细微差别。
命令tmux -V
将返回 /usr/bin/tmux 或其他目录中已安装的 tmux 的版本。如果您已经运行了 tmux,则可能会从其他版本的二进制文件和不同位置(例如,可以从 /home/user/bin/tmux
启动 tmux)启动 tmux。
在这种情况下,您需要调用
$ ps -e | grep tmux
[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'`
/usr/bin/tmux
),你可以使用-V标志执行该二进制文件以获取其版本。
/usr/bin/tmux -V
或者,如果 tmux 是由有限用户安装到 /home/user/bin/tmux
中的,则可以执行以下操作:
/home/user/bin/tmux -V
因此,您将得到当前正在运行的 tmux 版本,而不是安装的版本。
tmux
已经升级,则此方法将无效。 - nobodyps: option requires an argument -- u
。 - alexserver要获取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
:display-message -p "#{version}"
。 - Epimetheus/proc/
无法使用,但是可以使用proc_pidpath
(如果需要,可以将其包装成可执行文件以从bash中调用),请参见https://dev59.com/IXRA5IYBdhLWcg3w2x6W#8149380。 - timotheecourtmux 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.2a
。tmux display-message -p "#{pid}" | cat
<-- 挂起直到 ^C。
echo $(tmux display-message -p "#{pid}")/exe
<-- ^C 没有任何作用。 - DouglasDD要找到正在运行的tmux的实际版本,您必须找到tmux的PID:
pgrep tmux
有了这些信息,您可以通过运行以下命令来检查版本:
lsof -p $tmuxPID | grep REG | grep -i -e deleted -e "tmux$"
如果在 tmux 文件旁边没有“(deleted)”字样,您可以直接使用-V
运行该文件。/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
发送前缀(默认为ctrl-B),然后输入:
:display-message "#{version}"
这将在状态栏中显示版本号
tmux
版本,并且大多数时候您不太可能运行一个版本并拥有另一个出现在PATH中的版本。但是,如果您确实想要知道当前运行的版本,则这不可靠,原因有两个。 - iconoclast