
я следуюэтот урокдля написания скриптов создания окон tmux.
tmux new-window t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp'
иногда я убиваю myapp после запуска tmux, я хочу вернуться в оболочку в этом каталоге, но вместо этого это полностью убивает окно. Как лучше всего это исправить? Я думаю, что по крайней мере один ответ включает запуск оболочки и выполнение ею команд, но я не уверен, как лучше всего это сделать.
решение1
tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp; $SHELL'
запустит оболочку по умолчанию после завершения предыдущих команд (независимо от возвращаемого ими значения, т.е. даже если вы их не завершили).
Если вы хотите перейти в оболочку только в случае perl
завершения или сбоя процесса (и закрыть окно tmux в случае успешного завершения), используйте
tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp || $SHELL'
решение2
tmux
уже открывает для вас оболочку, в которой он выполняет команды cd
и perl
. Если вы не хотите запускатьдругойв оболочке, просто чтобы продолжить интерактивный сеанс (или предотвратить закрытие окна, без использования set-remain-on-exit
), вы можете сделать:
tmux new-window -t $SESSION:0 -k -n MAIN
tmux send-keys 'cd ~/main/ && perl -Ilib myapp' C-m
Если вам нужна другая оболочка под tmux
созданной оболочкой и вы хотите, чтобы эта оболочка выполняла команды и стала интерактивной (что отличается от ответа @n.st, который запускает оболочку впоследствии), вы можете сделать следующее:
tmux new-window -t $SESSION:0 -k -n MAIN 'bash --init-file <(echo "cd ~/main/ && perl -Ilib myapp")'
и если проблема в том, что bash
среда неполная, сделайте что-то вроде:
tmux new-window -t $SESSION:0 -k -n MAIN 'bash --init-file <(echo "source ~/.bashrc; cd ~/main/ && perl -Ilib myapp")'