Como posso definir meu shell padrão para iniciar o tmux

62

Eu gostaria que meu shell padrão do bash fosse direto para o tmux, em vez de sempre ter que digitar o tmux toda vez.

    
por Michael Durrant 20.07.2012 / 16:05

12 respostas

39

Isso parece funcionar ...

link

Basta adicionar a seguinte linha do código bash ao seu .bashrc antes dos aliases; o código para outras shells é muito similar:

[[ $TERM != "screen" ]] && exec tmux
    
por 20.07.2012 / 17:08
79

@ A resposta do StarNamer é geralmente precisa, embora eu inclua tipicamente os seguintes testes para ter certeza que (1) o tmux existe no sistema, (2) nós estamos em um shell interativo, e (3) o tmux não tenta para correr dentro de si:

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  exec tmux
fi

Referências

  • Usando command do bash para verificar a existência de um comando - link
  • Por que usar command em vez de which para verificar a existência de comandos - link
  • Usando $PS1 para verificar o shell interativo - link
  • Estado esperado da variável de ambiente $TERM "para todos os programas em execução no tmux" - link
por 06.02.2014 / 01:38
11

Adicionando uma linha como

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session && exit;}

no seu arquivo bashrc provavelmente fará o trabalho. Observe que esta linha sairá do ssh e terminará a conexão quando você desanexar ou sair do tmux. Eu gosto dessa configuração, pois salva toques de tecla para encerrar a conexão. Mas se você não ama isto (o que eu acho que é muito improvável) e preferiria permanecer no shell de login após o término, apenas remova o exit part:

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session;}

Observe também que você não deve quebrar tmux attach com exec , pois isso faria com que a conexão fosse fechada quando não houvesse sessões do tmux para anexar.

    
por 28.08.2016 / 07:03
5

Existe o comando chsh que altera o shell de login. Consulte man chsh .

    
por 20.07.2012 / 16:42
2

Estou usando com sucesso

case $- in *i*)
    [ -z "$TMUX" ] && exec tmux
esac

no meu .zshrc . Se você estiver usando o bash, coloque-o em .bashrc .

Eu também tentei definir tmux como meu shell padrão ( chsh -s $(which tmux) ) e ele parece interromper a execução direta do comando via SSH, por exemplo, ssh $some_server echo foo não produzirá nenhuma saída.

    
por 11.05.2014 / 04:09
1

Adicione isso ao seu ~/.tmux.conf

set -g default-command /usr/local/bin/fish
    
por 19.06.2014 / 18:49
1

Nenhuma das respostas acima funcionou para mim - exec tmux me impede de fechar o tmux sem sair do shell (seja ele aberto com Ctrl + T ou do menu do aplicativo).

Eu uso o Linux Mint, que permite mapear certas teclas de atalho para comandos, e (não-kosher como pode ser para alguns ...) Eu tenho shells de bash com comandos iniciando por lá, por exemplo. Win + Alt + B faz algum tipo de instrução bash -exec(vim) complicada para editar meu .bashrc, então ele age como um shell normal.

tmux carregado em vez de vim nessa situação depois de colocar o acima no topo do meu .bashrc . Eu coloquei a linha de execução do tmux em outra instrução if, verificando se ela está sendo executada no modo interativo.

if command -v tmux>/dev/null; then
        if [ ! -z "$PS1" ]; then # unless shell not loaded interactively, run tmux
                [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && tmux
        fi
fi

Você pode envolver tudo isso em uma linha, mas para facilitar a leitura, acho que está tudo bem.

    
por 02.08.2015 / 23:54
1

Vá para as preferências de terminal.

Edepoiscliquenabarra"command".

Verifiqueo"Executar um comando personalizado em vez da minha venda" e escreva o comando que você deseja executar na inicialização do seu terminal.

    
por 13.06.2016 / 23:09
1

Isso está no meu ~/.profile (estou usando ksh93 ):

if [[ -z "$TMUX" ]]; then
    if tmux has-session 2>/dev/null; then
        exec tmux attach
    else
        exec tmux
    fi
fi

Se a variável de ambiente TMUX estiver não definida / vazia, então ainda não estamos em uma sessão do tmux, então ...

Se tmux has-session retornar com um status de saída zero (true), haverá uma sessão disponível para anexar. Anexá-lo.

Se não, crie uma nova sessão.

Também é possível usar tmux como seu shell de login. Se você fizer isso, no entanto, certifique-se de definir default-shell para um shell real no seu arquivo ~/.tmux.conf (consulte o manual do tmux para obter mais informações sobre isso).

    
por 30.12.2016 / 14:26
1

Você poderia (e a partir de agora provavelmente deveria) usar o comando chsh para definir o tmux como shell padrão e, em seguida, incluir o seguinte em .tmux.conf :

set-option -g default-shell /path/to/your/favourite/shell

Lembre-se apenas de modificar o caminho no final da linha.

    
por 30.12.2016 / 13:51
0

Adicionando a resposta do @Louis Maddox, eu executaria a parte tmux com

(exec tmux attach || exec tmux new-session)
    
por 11.11.2015 / 23:38
-3

Como Mikel já declarou em seu comentário ter o tmux como seu shell de login pode ter efeitos colaterais. Mas você pode fazer tmux seu shell padrão, literalmente. O shell padrão de um usuário é definido em / etc / passwd. Então você pode se tornar root e editar o / etc / passwd, por exemplo sudo vi /etc/passwd procura a linha que começa com seu nome de usuário. Provavelmente termina com :/bin/bash . Mude / bin / bash para / usr / bin / tmux e agora o tmux é seu shell de login padrão.

No entanto, não garante que isso não cause problemas!

O que pode funcionar melhor é NÃO fazer qualquer coisa que requeira privilégios de root. Eu tentaria criar um arquivo na minha home directoy chamado .bash_login e iniciar o tmux a partir desse arquivo: 'echo "tmux" > ~ / .bash_login.

Isso deve funcionar, mas você tem que tentar encontrar o nosso, b / c a documentação do bash não é muito exata sobre o arquivo que é lido e executado quando.

    
por 20.07.2012 / 19:42