LINUX.ORG.RU

tmux, bash script

 ,


0

1

Доброго времени суток. Хочу написать скрипт в котором создаётся окружение. У менять есть цикл в котом сначала создаются сессии, а потом хочу в разных сессия создать окна с панелями, то такая связка не работает:

    local sessions="main virt dev adm"

    for name in $sessions; do
        tmux has-session -t $name 2>/dev/null || tmux new-session -d -s $name
    done

    local path="${HOME}/dev"
    local windows="one two three four"

    tmux attach-session -d -t dev
    for i in $windows; do
        tmux new-window -n $i -c $path/$i 'ranger'\; split-window -h -c $path/$i \; split-window -v -l 15% -c $path/$i \; select-pane -t 0
    done

у меня скрипт не переключается на сессию dev, в первом цикле он остаётся на последней сессии и создаёт там окна с панелями. Я читаю ман но не могу понять, как в скрипте зацепится за другую сессию. tmux также сортирует сессии по алфавиту, а как сделать чтобы он сортировал в порядке создания?

upd:

Решается разными способами в зависимости от того где и что да и зачем это нужно.

  • Как я понял из экспериментов tmux всегда помнит какая созданная сессия была последней и остальные команды на создания окон или чего либо ещё будет применятся к этой сессии, если команды вводятся без tmux. У меня была проблема в том что не до конца понимал почему скрипт отрабатывает по разному, внутри tmux и без него.
  • Если скрипт запускается не из tmux можно использовать: tmux attach-session -d -t $name\; do_something\; detach будет отрабатывать как нужно
  • Если скрипт запускать из tmux то перед запуском команды нужно нужно очистить переменную окружения TMUX, чтобы не выдавало ошибки: sessions should be nested with care, unset $TMUX to force

Переписал с учётом своих пожеланий =)

    local sessions="main virt dev adm"
    for name in $sessions; do
        tmux has-session -t $name 2>/dev/null || tmux new-session -d -s $name
    done
    local path="${HOME}/dev"
    local windows="one two three four"
    for i in $windows; do
        TMUX= tmux attach -d -t dev\; neww -n $i -c $path/$i 'ranger'\; splitw -h -c $path/$i \; splitw -v -l 15% -c $path/$i \; selectp -t 0\; detach
    done

Думаю уже писали про это, но чукча не читатель, но писатель =)



Последнее исправление: SmilePlz (всего исправлений: 4)

Первая проблема решается постановкой dev на последнее место или проверкой внутри цикла названия сессии при создании. По поводу второй - сортировки, это где сортировка? При просмотре сессий?

А еще с какой-то версии tmux умеет в старт приложений через хуки в tmux.conf

suncon
()
Ответ на: комментарий от suncon

спасибо за ответ, но смысл в том, что я хотел создать сессии циклом, но не понимаю как к сессии подключится из скрипта и создавать в них окна. Я конечно понимаю что каждая команда в скрипте работает в независимости от того что было раньше. То есть команда: tmux attach-session -d -t dev выполнилась, оно подключилось к сессии но на другой строке то tmux new-window -n $i -c $path/$i 'ranger', оно будет выполнятся в другом под-шеле, а в нём tmux присоединён к другой сессии.

Я пробовал комбинировать со скобками и без, но это не работает:

(tmux attach-session -d -t dev \; new-window -n $i -c $path/$i 'ranger')

по поводу сортировки у меня получается следующее в независимости от порядка создания, сортирует по алфавиту:

admin: 2 windows (created Tue Jul 25 14:23:40 2023)
develop: 4 windows (created Tue Jul 25 14:23:40 2023)
main: 1 windows (created Tue Jul 25 14:51:00 2023)
virtual: 4 windows (created Tue Jul 25 14:31:39 2023) (attached)

Про хуки не понял, можешь объяснить?

SmilePlz
() автор топика
Последнее исправление: SmilePlz (всего исправлений: 1)