В настоящее время я использую gnome-терминал и tmux вместе: каждый раз, когда я запускаю gnome-терминал, запускается tmux:

#!/bin/bash

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

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

Но как я могу запустить tmux с рабочим каталогом самого последнего активного сеанса tmux, если существует один активный сеанс tmux?

1 ответ1

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 для уникального идентификатора панели, описано на странице руководства в разделе FORMATS. Вы можете выбрать самый большой из этих идентификаторов в качестве самой последней панели, а значение pwd= в качестве желаемого каталога. Например, передайте указанную выше команду tmux в

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

Используя переменную window_activity в более поздних tmux, которая дает время в секундах с начала последней активности в окне, вы можете упростить приведенное выше, перечислив только это значение и текущий путь, и выбрав путь для максимального значения активности:

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}'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .