Gostaria que meu shell bash padrão fosse direto para o tmux, em vez de sempre ter que digitar tmux toda vez.
79
Isso parece funcionar ...
https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login
Basta adicionar a seguinte linha de código bash ao seu .bashrc antes dos seus aliases; o código para outras conchas é muito semelhante:
[[ $TERM != "screen" ]] && exec tmux
[[ $- != *i* ]] && return
a não ser um loop infinito (a partir da mesma página)TERM
pode ser definida como outro valor pelo.tmux.conf
arquivo do usuário . Melhor verificar se aTMUX
variável está definida ou não.A resposta do @ StarNamer é geralmente precisa, embora eu normalmente inclua os seguintes testes para garantir que (1) o tmux exista no sistema, (2) estamos em um shell interativo e (3) o tmux não tente executar dentro em si:
Referências
command
para verificar a existência de um comando - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommand
vez dewhich
verificar a existência de comandos - https://unix.stackexchange.com/a/85250$PS1
para verificar se há shell interativo - https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM
Variável esperada do estado da ambiente "para todos os programas em execução no tmux" - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANESfonte
command
antes, mas não sabia que existia.exec
declaração não permite sair do tmux sem sair do terminal inteiro! : |exec
substitui o atual processo com um novo - neste caso, ele substitui o shell de login do bash com tmux, então quando tmux sai então não há outro terminal para voltar a cair para :)exec tmux
pelo seu gosto preferido detmux attach
exec tmux
usá-exec tmux new-session -A -s main
lo, sempre terei uma sessão chamada principal e anexarei a ela (em vez de criar uma nova sempre que me conectar à minha máquina remota), mas ela não funcionará comotmux attach
no caso de não haver sessão disponível (encontrada aqui: unix.stackexchange.com/a/176885/256942 )Adicionando uma linha como
no seu arquivo bashrc provavelmente fará o trabalho. Observe que esta linha sairá do ssh e encerrará a conexão quando você desconectar ou sair do tmux. Eu gosto dessa configuração, pois salva as teclas pressionadas para finalizar a conexão. Mas se você não gosta disso (o que acho improvável) e prefere permanecer no shell de login após o término, remova a
exit
parte:Além disso, note que você não deve envolver
tmux attach
comexec
, pois isso faria com que a conexão seja fechada quando não há sessões tmux para anexar.fonte
Há um comando
chsh
que altera o shell de login. Consulteman chsh
.fonte
tmux
não é um shell, é um multiplexador de terminal como a tela GNU. Curiosamente, ele suporta a-c
opção de acordo com a página de manual , portanto, pode funcionar como um shell apenas o suficiente para usá-lo como seu shell de login, mas suspeito que não funcionará corretamente em todas as situações, por exemplo, logins gráficos via gdm / kdm .ssh $some_server echo foo
)./etc/shells
, portanto é um shell de login válido.default-shell
configuração na configuração do tmux para apontar para um shell real.Estou usando com sucesso
no meu
.zshrc
. Se você estiver usando o bash, coloque-o no seu.bashrc
lugar.Eu também tentei definir
tmux
como meu shell padrão (chsh -s $(which tmux)
) e parece interromper a execução direta de comandos via SSH, por exemplossh $some_server echo foo
, não produzirá nenhuma saída.fonte
Vá para preferências do terminal.
E, em seguida, clique na barra de "comando".
Marque a opção "Executar um comando personalizado em vez da minha venda" e escreva o comando que deseja executar na inicialização do seu terminal.
fonte
Nenhuma das respostas acima funcionou para mim - me
exec tmux
impede de fechar o tmux sem sair do shell (seja aberto comCtrl
+T
ou no menu do aplicativo).Eu uso o Linux Mint, que permite mapear certas teclas de atalho para comandos e (por mais que seja para alguns ..) eu tenho shells bash com comandos iniciando lá em cima, por exemplo,
Win
+Alt
+B
faz algum tipo debash -exec(vim)
declaração complicada para edite meu .bashrc, para que ele funcione como um shell comum.O tmux foi carregado em vez do vim nessa situação depois de colocar o item acima no topo do meu
.bashrc
. Embrulhei a linha de execução do tmux em outra instrução if, verificando se ela está sendo executada no modo interativo.Você pode agrupar tudo isso em uma linha, mas, para facilitar a leitura, acho que está bem.
fonte
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
Adicionando à resposta de @Louis Maddox, eu executaria a parte do tmux com;
fonte
exec sh -c 'tmux a || tmux'
, o que (depois de analisar sua resposta) provavelmente fará com que coisas ruins aconteçam se o tmux não puder iniciar por qualquer motivo ..... obrigado, vou usar o seu a partir de agora :)tmux new -A -s mysession
provavelmente irá funcionar também.Isto está no meu
~/.profile
(eu estou usandoksh93
):Se a
TMUX
variável de ambiente estiver desconfigurada / vazia, ainda não estamos em uma sessão tmux, então ...Se
tmux has-session
retornar com um status de saída zero (true), há uma sessão disponível para anexar. Anexar a ele.Caso contrário, 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 definirdefault-shell
um shell real no seu~/.tmux.conf
arquivo (consulte o manual do tmux para obter mais informações sobre isso).fonte
Você pode (e a partir de agora provavelmente deveria) usar o
chsh
comando para definir o tmux como shell padrão e adicionar o seguinte a.tmux.conf
:Lembre-se de modificar o caminho no final da linha.
fonte
Combinei as verificações extensivas, com a verificação condicional da sessão, e coloquei minha própria rotação para criar uma sessão padrão conectada ou criada. A menos que você esteja dentro de outra sessão do tmux ou outras condições de proteção sejam atendidas.
Com base nestas respostas:
https://unix.stackexchange.com/a/306165/198110
https://unix.stackexchange.com/a/113768/198110
fonte
Adicione isso ao seu
~/.tmux.conf
fonte
Como Mikel já afirmou 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 / etc / passwd, por exemplo,sudo vi /etc/passwd
procure a linha que começa com seu nome de usuário. Provavelmente termina com:/bin/bash
. Altere / bin / bash para / usr / bin / tmux e agora tmux é seu shell de login padrão.No entanto, não há garantia de que isso não cause problemas!
O que pode funcionar melhor é NÃO fazer nada que requeira privilégios de root. Eu tentaria criar um arquivo em meu diretório pessoal chamado .bash_login e iniciar o tmux dentro desse arquivo: `echo" tmux "> ~ / .bash_login.
Isso deve funcionar, mas você precisa tentar descobrir a si mesmo, porque a documentação do bash não é muito exata sobre qual arquivo é lido e executado quando.
fonte
chsh
faz! Só que o seu caminho exige ser root e é propenso a erros. A execuçãotmux
de.bash_login
é mais provável que interrompa logins remotos.