Como faço para soltar um shell depois de sair de um comando que iniciei pelo script tmux?

3

Estou seguindo este tutorial para criar scripts para a criação de janelas tmux.

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

às vezes eu mato o myapp depois que inicio o tmux, eu quero voltar para um shell nesse diretório, mas isso mata a janela completamente. Qual é a melhor maneira de consertar isso? Acho que pelo menos uma resposta envolve a execução de um shell e a execução desses comandos, mas não tenho certeza sobre a melhor maneira de fazer isso.

    
por xenoterracide 12.10.2013 / 22:51

2 respostas

4

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

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

Se você quiser apenas descartar o shell se o processo perl foi eliminado ou falhou (e a janela do tmux fechar, se for bem-sucedida), use

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

tmux já abre um shell para você no qual ele executa os comandos cd e perl . Se você não quiser executar outro shell com base nisso, apenas para continuar uma sessão interativa (ou impedir que a janela seja fechada, sem usar set-remain-on-exit ), será possível fazer isso:

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

Se você quiser outro shell sob o shell criado pelo tmux 'e desejar que o shell execute os comandos e torne-se interativo (o que é diferente de @ n.st answer que executa o shell posteriormente), você pode:

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

e se for um problema que bash tenha 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")'
    
por 05.01.2015 / 11:04