Мои выкрутасы:
pure awk
awk 'BEGIN{for(;n<31;)print ++n"|"n","}'
printf
+ xargs
printf '%s\n' {0..31} | xargs -I {} echo "{}|{},"
repeat
loop in zsh
n=0; repeat 32 echo "$n|$((n++)),"
Я думаю, вы можете добиться того, что ищете, используя соответствующий формат с tmux list-session
и анализируя вывод:
if [ -z "$TMUX" ]; then
attach_session=$(tmux 2> /dev/null ls -F \
'#{session_attached} #{?#{==:#{session_last_attached},},1,#{session_last_attached}} #{session_id}' |
awk '/^0/ { if ($2 > t) { t = $2; s = $3 } }; END { if (s) printf "%s", s }')
if [ -n "$attach_session" ]; then
tmux attach -t "$attach_session"
else
tmux
fi
fi
Приведенный здесь формат для tmux ls
дает для каждого сеанса количество подключенных клиентов, время последнего подключения (или 1, если оно никогда не подключалось ранее, например, после tmux new -d
), и идентификатор сеанса. Сценарий AWK использует эту информацию для поиска самого последнего подключенного сеанса без подключенных в данный момент клиентов и выводит его идентификатор. Затем мы либо присоединяемся к этому сеансу, либо создаем новый, если такой сеанс не найден, например, когда сервер не запущен или все существующие сеансы подключены.