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

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

я следуюэтот урокдля написания скриптов создания окон 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")'

Связанный контент