Me gustaría que mi bash shell predeterminado vaya directamente a tmux en lugar de que siempre tenga que escribir tmux cada vez.
79
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 otros shells es muy similar:
[[ $TERM != "screen" ]] && exec tmux
[[ $- != *i* ]] && returnno ser un ciclo infinito (de la misma página)TERMdel usuario puede establecer otro valor.tmux.conf. Es mejor verificar si laTMUXvariable está establecida o no.La respuesta de @ StarNamer es generalmente precisa, aunque generalmente incluyo las siguientes pruebas para asegurarme de que (1) tmux existe en el sistema, (2) estamos en un shell interactivo y (3) tmux no intenta ejecutarse dentro de sí mismo:
Referencias
commandpara verificar la existencia de un comando: http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommandlugar dewhichverificar la existencia de comandos - https://unix.stackexchange.com/a/85250$PS1para verificar el shell interactivo: https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERMla variable de entorno "para todos los programas que se ejecutan dentro de tmux" - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANESfuente
commandantes pero no me di cuenta de que existía.execdeclaración no le permite salir de tmux sin salir de la terminal completa! : |execreemplaza el proceso actual por uno nuevo; en este caso, reemplaza el shell de inicio de sesión de bash por tmux, por lo que cuando tmux sale, no hay otro terminal al que recurrir :)exec tmuxcon su sabor preferido detmux attachexec tmuxusar,exec tmux new-session -A -s mainpor lo que siempre tendré una sesión llamada main y la adjuntaré (en lugar de crear una nueva cada vez que me conecte a mi máquina remota) pero no se bloqueará como se usatmux attachen caso de que no haya una sesión disponible (que se encuentra aquí: unix.stackexchange.com/a/176885/256942 )Agregar una línea como
en su archivo bashrc probablemente hará el trabajo. Tenga en cuenta que esta línea saldrá de ssh y finalizará la conexión una vez que desconecte o salga de tmux. Me gusta esta configuración, ya que guarda las pulsaciones de teclas para terminar la conexión. Pero si no le gusta esto (lo cual creo que es muy poco probable) y prefiere permanecer en el shell de inicio de sesión después de la finalización, simplemente elimine la
exitparte:También tenga en cuenta que no debe envolver
tmux attachconexec, ya que esto causa que la conexión se cierra cuando no hay sesiones TMux para adjuntar a.fuente
Hay un comando
chshque cambia el shell de inicio de sesión. Consultarman chsh.fuente
tmuxno es un shell, es un multiplexor terminal como la pantalla GNU. Curiosamente, admite la-copción de acuerdo con la página de manual , por lo que puede funcionar como un shell lo suficiente como para usarlo como su shell de inicio de sesión, pero sospecho que no funcionará correctamente en todas las situaciones, por ejemplo, inicios de sesión gráficos a través de gdm / kdm .ssh $some_server echo foo)./etc/shells, por lo que es un shell de inicio de sesión válido.default-shellconfiguración en la configuración de tmux para que apunte a un shell real.Estoy usando con éxito
en mi
.zshrc. Si estás usando bash, ponlo en tu.bashrclugar.También intenté configurarlo
tmuxcomo mi shell predeterminado (chsh -s $(which tmux)) y parece interrumpir la ejecución directa de comandos a través de SSH, por ejemplossh $some_server echo foo, no producirá ningún resultado.fuente
Ir a las preferencias de terminal.
Y luego haga clic en la barra de "comando".
Marque la opción "Ejecutar un comando personalizado en lugar de mi venta" y escriba el comando que desee ejecutar al inicio de su terminal.
fuente
Ninguna de las respuestas anteriores funcionó para mí: me
exec tmuximpide cerrar tmux sin salir del shell (ya sea que se abra conCtrl+To desde el menú de la aplicación).Utilizo Linux Mint, que le permite asignar ciertas teclas de acceso rápido a comandos, y (aunque no sea kosher para algunos ...) Tengo bash shells con comandos que comienzan allí, por ejemplo,
Win+Alt+Bhace algún tipo debash -exec(vim)enunciado complicado edito mi .bashrc, para que actúe como un shell normal.tmux cargó en lugar de vim en esa situación después de colocar lo anterior en la parte superior de mi
.bashrc. He envuelto la línea de ejecución de tmux en otra instrucción if, verificando que se esté ejecutando en modo interactivo.Podrías envolver todo eso en una línea, pero para facilitar la lectura, creo que está bien.
fuente
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &Agregando a la respuesta de @Louis Maddox, ejecutaría tmux part con;
fuente
exec sh -c 'tmux a || tmux', que (después de ver su respuesta) probablemente hará que sucedan cosas malas si tmux no puede comenzar por alguna razón ... gracias, usaré la suya de ahora en adelante :)tmux new -A -s mysessionprobablemente también funcionará.Esto está en mi
~/.profile(estoy usandoksh93):Si la
TMUXvariable de entorno no está configurada / vacía, entonces aún no estamos en una sesión tmux, así que ...Si
tmux has-sessionregresa con un estado de salida cero (verdadero), hay una sesión disponible para adjuntar. Adjuntar a ella.Si no, cree una nueva sesión.
También es posible usarlo
tmuxcomo su shell de inicio de sesión. Sin embargo, si hace esto, asegúrese de establecerdefault-shellun shell real en su~/.tmux.confarchivo (consulte el manual de tmux para obtener más información al respecto).fuente
Podrías (y probablemente ahora deberías) usar el
chshcomando para configurar tmux como shell predeterminado y luego agregar lo siguiente a.tmux.conf:Solo recuerde modificar la ruta al final de la línea.
fuente
Combiné las comprobaciones extensivas, con la comprobación de sesión condicional, y le di mi propio giro, para crear una sesión predeterminada que está conectada o creada. A menos que esté dentro de otra sesión de tmux, o se cumplan otras condiciones de protección.
Basado en estas respuestas:
https://unix.stackexchange.com/a/306165/198110
https://unix.stackexchange.com/a/113768/198110
fuente
Agregue esto a su
~/.tmux.conffuente
Como Mikel ya dijo en su comentario que tiene tmux como su shell de inicio de sesión puede tener efectos secundarios. Pero puedes hacer
tmuxtu shell predeterminado, literalmente. El shell predeterminado de un usuario se define en / etc / passwd. Para que pueda convertirse en root y editar / etc / passwd, por ejemplo,sudo vi /etc/passwdbusque la línea que comienza con su nombre de usuario. Probablemente termina con:/bin/bash. Cambie / bin / bash a / usr / bin / tmux y ahora tmux es su shell de inicio de sesión predeterminado.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 archivo en mi directorio de inicio llamado .bash_login e iniciar tmux desde ese archivo: `echo" tmux "> ~ / .bash_login.
Esto debería funcionar, pero debe intentar encontrarlo usted mismo, porque la documentación de bash no es muy exacta sobre qué archivo se lee y se ejecuta cuando.
fuente
chshhace! Excepto que su camino requiere ser root y es propenso a errores. Ejecutartmuxdesde.bash_logines más probable que rompa inicios de sesión remotos.