Como faço para entrar em um shell depois de sair de um comando que iniciei com o script tmux?

Como faço para entrar em um shell depois de sair de um comando que iniciei com o script tmux?

estou seguindoeste tutorialpara criar scripts de criação de janelas tmux.

tmux new-window t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp'

às vezes eu mato myapp depois de iniciar o tmux, quero voltar para um shell nesse diretório, mas em vez disso, isso mata a janela completamente. Qual o melhor jeito de consertar isso? Acho que pelo menos uma resposta envolve executar um shell e fazer com que ele execute comandos, mas não tenho certeza da melhor maneira de fazer isso.

Responder1

tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp; $SHELL'

irá iniciar seu shell padrão quando os comandos anteriores terminarem (independentemente do valor de retorno, ou seja, mesmo que você não os tenha matado).

Se você quiser apenas ir para o shell se o perlprocesso for encerrado ou falhar (e fechar a janela do tmux se tiver sucesso), use

tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp || $SHELL'

Responder2

tmuxjá abre um shell para você no qual executa os comandos cde perl. Se você não quer correroutroshell abaixo disso, apenas para continuar uma sessão interativa (ou evitar que a janela feche, sem usar set-remain-on-exit), você pode fazer:

tmux new-window -t $SESSION:0 -k -n MAIN
tmux send-keys 'cd ~/main/ && perl -Ilib myapp' C-m

Se você quiser outro shell no tmuxshell ' criado e quiser que esse shell execute os comandos e se torne interativo (o que é diferente da resposta @n.st que executa o shell posteriormente), você pode fazer:

tmux new-window -t $SESSION:0 -k -n MAIN 'bash --init-file <(echo "cd ~/main/ && perl -Ilib myapp")'

e se for um problema que bashtenha um ambiente incompleto faça algo como:

tmux new-window -t $SESSION:0 -k -n MAIN 'bash --init-file <(echo "source ~/.bashrc; cd ~/main/ && perl -Ilib myapp")'

informação relacionada