同时使用 gnome-terminal 和 tmux:如何使用最新的工作目录启动?

同时使用 gnome-terminal 和 tmux:如何使用最新的工作目录启动?

我目前正在同时使用 gnome-terminal 和 tmux:每次启动 gnome-terminal 时,都会启动 tmux:

#!/bin/bash

args=()
if type tmux > /dev/null; then
  args+=('-e' "tmux new-session")
fi

exec gnome-terminal "${args[@]}" "$@"

但是,如果存在一个现有的活动 tmux 会话,我如何使用最近活动的 tmux 会话的工作目录启动 tmux?

答案1

可能有帮助的是list-panes您可以使用的命令-a。默认情况下,它不提供您想要的内容,但您可以为其指定格式,并在其中包含,例如,pane_current_path以及可能足够的其他值,以便您决定要复制哪些窗格。例如

$ tmux list-panes -a -F 'uniq=#D pane=#P title="#T" sess=#S windex=#I winnam=#W activ=#{pane_active} pwd=#{pane_current_path}'
uniq=%0 pane=0 title="myhost 2" sess=0 windex=0 winnam=bash activ=0 pwd=/home/meuh
uniq=%1 pane=1 title="myhost 3" sess=0 windex=0 winnam=bash activ=1 pwd=/home/meuh
uniq=%2 pane=0 title="myhost 4" sess=1 windex=0 winnam=bash activ=0 pwd=/tmp
uniq=%4 pane=1 title="myhost 5" sess=1 windex=0 winnam=bash activ=1 pwd=/usr/lib
uniq=%3 pane=0 title="myhost 1" sess=2 windex=0 winnam=bash activ=1 pwd=/tmp

每个变量的含义,#D例如唯一窗格 ID在手册页的 FORMATS 下有描述。您可以选择这些 ID 中最大的一个作为最新窗格,并将值pwd=作为所需目录。例如,将上述 tmux 命令导入

 | awk '{id=substr($1,7)+0;if(id>max){max=id;pwd=$NF}} END{print substr(pwd,5)}'

在以后的 tmux 中使用window_activity变量,该变量给出自窗口中最后一个活动开始以来的时间(以秒为单位),您可以将上述内容简化为仅列出此值和当前路径,并获取最大活动值的路径:

tmux list-panes -a -F '#{window_activity} #{pane_current_path}' |
awk '{time=$1+0;if(time>max){max=time;pwd=substr($0,length($1)+2)}} END{print pwd}'

相关内容