¿Cómo puedo configurar mi shell pnetworkingeterminado para iniciar tmux?

Me gustaría que mi shell bash pnetworkingeterminado vaya directamente a tmux en lugar de tener que escribir tmux siempre.

Esto parece funcionar …

https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login

Simplemente agregue la siguiente línea de código bash a su .bashrc antes de sus alias; el código para otras conchas es muy similar:

[[ $TERM != "screen" ]] && exec tmux 

La respuesta de @ StarNamer es generalmente precisa, aunque normalmente incluyo las siguientes testings para asegurarme de que tmux (1) exista en el sistema y (2) no intente ejecutarse dentro de sí mismo:

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

Agregar una línea como

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

probablemente haga lo que quiera. Tenga en count que esta línea terminará la connection después de desconectar o salir de tmux. Si no le gusta este comportamiento y desea permanecer en el shell de inicio de session después de salir de tmux, puede usar esta línea:

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

También tenga en count que "exec" no debe colocarse frente a "tmux attach" ya que eso haría que la connection se cerrara aunque no haya sesiones de tmux para adjuntar.

Hay un command chsh que cambia el shell de inicio de session. Consulte a man chsh .

Estoy usando con éxito

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

en mi .zshrc . Si está utilizando bash, póngalo en su .bashrc en su lugar.


También intenté establecer tmux como mi shell pnetworkingeterminado ( chsh -s $(which tmux) ) y parece romper la ejecución directa de commands a través de SSH, por ejemplo, ssh $some_server echo foo no producirá ningún resultado.

Agregue esto a su ~/.tmux.conf

 set -g default-command /usr/local/bin/fish 

Esto está en mi ~/.profile (estoy usando ksh93 ):

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

Si la variable de entorno TMUX está desarmada / vacía, entonces todavía no estamos en una session de tmux, entonces …

Si tmux has-session devuelve un estado de salida cero (verdadero), hay una session disponible para adjuntar. Adjuntar a ella.

Si no, crea una nueva session.

También es posible usar tmux como su shell de inicio de session. Sin embargo, si hace esto, asegúrese de establecer default-shell en un shell real en su file ~/.tmux.conf (consulte el manual de tmux para get más información al respecto).

Podrías (y probablemente deberías hacerlo ahora) usar el command chsh para establecer tmux como el shell pnetworkingeterminado, luego agrega lo siguiente a .tmux.conf :

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

Solo recuerde modificar la ruta al final de la línea.

Ninguna de las respuestas anteriores funcionó para mí: exec tmux me impide cerrar tmux sin salir del shell (ya sea que se abra con Ctrl + T o desde el menu de la aplicación).

Yo uso Linux Mint, que te permite asignar ciertas teclas de acceso directo a los commands, y (no kosher como puede ser para algunos …) Tengo shell bash con commands comenzando allí, por ejemplo, Win + Alt + B hace algún tipo de statement complicada bash -exec(vim) para editar mi .bashrc, por lo que actúa como un shell normal.

tmux cargado en lugar de vim en esa situación después de colocar lo anterior en la parte superior de mi .bashrc . Envolví la línea de ejecución de tmux en otra instrucción if, comprobando que se está ejecutando en modo interactivo.

 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 

Podrías envolver todo eso en una sola línea, pero para ser legible, creo que está bien.

Agregando a la respuesta de @Louis Maddox, ejecutaría la parte de tmux con;

 (exec tmux attach || exec tmux new-session) 

Ir a las preferences de terminal. enter image description here

Y luego haz clic en la barra de "command". enter image description here

Verifique "Ejecutar un command personalizado en lugar de vender" y escriba el command que desee ejecutar al inicio de su terminal.

Como Mikel ya indicó en su comentario que tiene tmux, su shell de inicio de session puede tener efectos secundarios. Pero puedes hacer que tmux tu shell pnetworkingeterminado, literalmente. El shell pnetworkingeterminado de un usuario se define en / etc / passwd. Entonces puede convertirse en usuario root y editar / etc / passwd, por ejemplo, sudo vi /etc/passwd search la línea que comienza con su nombre de usuario. Probablemente termine con :/bin/bash . Cambie / bin / bash a / usr / bin / tmux y ahora tmux es su shell de inicio de session pnetworkingeterminado.

Sin embargo, ¡no hay garantía de que esto no cause problemas!

Lo que puede funcionar mejor es NO hacer nada que requiera privilegios de root. Intentaría crear un file en mi directory de origen llamado .bash_login e iniciar tmux desde ese file: `echo" tmux "> ~ / .bash_login.

Esto debería funcionar, pero tiene que intentar encontrarlo usted mismo, b / c la documentation de bash no es muy exacta sobre qué file se lee y se ejecuta cuando.