Me gustaría que mi bash shell predeterminado vaya directamente a tmux en lugar de que siempre tenga que escribir tmux cada vez.
Me gustaría que mi bash shell predeterminado vaya directamente a tmux en lugar de que siempre tenga que escribir tmux cada vez.
Respuestas:
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
TERMdel usuario puede establecer otro valor .tmux.conf. Es mejor verificar si la TMUXvariable 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:
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
exec tmux
fi
Referencias
commandpara verificar la existencia de un comando: http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommandlugar de whichverificar 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_PANEScommandantes 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 attach
exec 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 usa tmux 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
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;}
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:
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session;}
También tenga en cuenta que no debe envolver tmux attachcon exec, ya que esto causa que la conexión se cierra cuando no hay sesiones TMux para adjuntar a.
Hay un comando chshque cambia el shell de inicio de sesión. Consultar man chsh.
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
case $- in *i*)
[ -z "$TMUX" ] && exec tmux
esac
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 ejemplo ssh $some_server echo foo, no producirá ningún resultado.
Ninguna de las respuestas anteriores funcionó para mí: me exec tmuximpide cerrar tmux sin salir del shell (ya sea que se abra con Ctrl+ 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 de bash -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.
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 línea, pero para facilitar la lectura, creo que está bien.
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
Agregando a la respuesta de @Louis Maddox, ejecutaría tmux part con;
(exec tmux attach || exec tmux new-session)
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 usando ksh93):
if [[ -z "$TMUX" ]]; then
if tmux has-session 2>/dev/null; then
exec tmux attach
else
exec tmux
fi
fi
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 establecer default-shellun shell real en su ~/.tmux.confarchivo (consulte el manual de tmux para obtener más información al respecto).
Podrías (y probablemente ahora deberías) usar el chshcomando para configurar tmux como shell predeterminado y luego agregar 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.
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.
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
tmux a -t default || exec tmux new -s default && exit;
fi
Basado en estas respuestas:
Agregue esto a su ~/.tmux.conf
set -g default-command /usr/local/bin/fish
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.
chshhace! Excepto que su camino requiere ser root y es propenso a errores. Ejecutar tmuxdesde .bash_logines más probable que rompa inicios de sesión remotos.
[[ $- != *i* ]] && returnno ser un ciclo infinito (de la misma página)