Isso parece funcionar ...
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
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.
Isso parece funcionar ...
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
@ 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
command
do bash para verificar a existência de um comando - link
command
em vez de which
para verificar a existência de comandos - link
$PS1
para verificar o shell interativo - link
$TERM
"para todos os programas em execução no tmux" - link
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.
Existe o comando chsh
que altera o shell de login. Consulte man chsh
.
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.
Adicione isso ao seu ~/.tmux.conf
set -g default-command /usr/local/bin/fish
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.
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).
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.
Adicionando a resposta do @Louis Maddox, eu executaria a parte tmux com
(exec tmux attach || exec tmux new-session)
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.