ventana tutorial texto para manjaro esta donde copiar cerrar archivo bash tmux

bash - tutorial - ¿Cómo iniciar tmux con varias ventanas en diferentes directorios?



tmux split window (5)

Los errores de shell probablemente se deben a algún problema en los archivos de inicio (o algo que ejecutan).

Como comentó el shellter, incluir temporalmente el set -vx comandos set -vx principio de la secuencia de inicio es una buena manera de averiguar dónde están ocurriendo los errores.
Si encuentra que la salida de -vx es demasiado detallada, podría intentar "debugging printf" (agregando manualmente las declaraciones de depuración a sus archivos de inicio hasta que pueda reducir exactamente qué líneas están causando los errores):

  • Coloque el echo start of .bashrc y el echo end of .bashrc al inicio / final de su .bashrc para ver si el error se produce durante su .bashrc . Si no, .bash_login sus otros archivos de inicio: .bash_profile / .bash_login / .profile . Si los errores ocurren antes de ese archivo, entonces el problema puede estar en /etc/profile .
  • Una vez que sepa qué archivo se está procesando cuando ocurren los errores, agregue más salidas de depuración alrededor de cada "bloque principal" o línea para reducir la sección / línea responsable.
  • Es posible que los errores no se encuentren en su propio archivo de inicio, sino en un script que se ejecuta.

Nota: estas adiciones de depuración deben ser temporales, ya que causarán problemas si alguna vez utiliza un programa que realiza inicios de sesión automatizados (por ejemplo, rsync , acceso a Git basado en SSH, etc.) ya que estos programas esperan una conexión "limpia" sin ese ruido de depuración presente.

No debería haber necesidad de usar el comando cd así en el argumento de comando de shell dado a tmux new-session o tmux new-window .

Una nueva ventana "heredará" el directorio de trabajo actual cuando se utiliza new-session y new-window desde la línea de comandos (es decir, cuando se realiza a través del binario tmux , en lugar de hacerlo a través de un enlace o en un aviso tmux - :) . Según el archivo CHANGES, parece que este ha sido el caso desde tmux 0.6 (al menos para new-window ).

Esta es la herencia mediada por tmux , no la herencia padre-hijo, que es el mecanismo habitual para transmitir el cwd.

Este script me funciona con tmux 1.5:

#!/bin/bash # var for session name (to avoid repeated occurences) sn=xyz # Start the session and window 0 in /etc # This will also be the default cwd for new windows created # via a binding unless overridden with default-path. cd /etc tmux new-session -s "$sn" -n etc -d # Create a bunch of windows in /var/log cd /var/log for i in {1..6}; do tmux new-window -t "$sn:$i" -n "var$i" done # Set the default cwd for new windows (optional, otherwise defaults to session cwd) #tmux set-option default-path / # Select window #1 and attach to the session tmux select-window -t "$sn:1" tmux -2 attach-session -t "$sn"

Esto también podría (como efecto secundario) aliviar los errores de inicio de su shell, ya que la forma en que tmux inicia una shell es diferente de un bash -i simple (es más parecido a bash -l , que usa su .bash_profile / .bash_login / .profile lugar de (simplemente) su .bashrc ).

Quiero usar un script para abrir una sesión tmux con 6 ventanas, cada una en un directorio diferente. Comencé con un script que encontré y probé esto primero:

tmux new-session -s xyz -n etc -d ''cd /etc'' tmux new-window -t xyz:1 -n var ''cd /var/log''

Pero pronto descubrí que esto no funcionará como esperaba, la ventana se cerrará una vez que se complete el comando de shell.

Así que mi siguiente idea fue comenzar un nuevo shell como este:

tmux new-session -s xyz -n etc -d ''cd /etc; bash -i'' tmux new-window -t xyz:1 -n var ''cd /var/log; bash -i'' tmux new-window -t xyz:2 -n var2 ''cd /var/log; bash -i'' tmux new-window -t xyz:3 -n var3 ''cd /var/log; bash -i'' tmux new-window -t xyz:4 -n var4 ''cd /var/log; bash -i'' tmux new-window -t xyz:5 -n var5 ''cd /var/log; bash -i'' tmux new-window -t xyz:6 -n var6 ''cd /var/log; bash -i'' tmux select-window -t xyz:1 tmux -2 attach-session -t xyz

Esto casi funciona. Pero si comienzo más de 4 ventanas, con frecuencia veo los siguientes errores de bash en una de las ventanas después del inicio:

bash: [: =: unary operator expected bash: [: too many arguments bash: [: =: unary operator expected bash: [: =: unary operator expected bash: [: =: unary operator expected bash: [: =: unary operator expected bash: [: too many arguments bash: [: =: unary operator expected bash: [: =: unary operator expected bash: [: =: unary operator expected bash: [: =: unary operator expected bash: [: =: unary operator expected

No tengo idea de por qué sucede esto, pero sigo pensando que no estoy haciendo esto bien. ¿Hay una mejor manera de configurar una sesión tmux en varios directorios?


Por mi vida, no pude hacer que -c funcione, así que resolví esto creando un script que se ejecuta a través del envío. Esto me permite hacer lo que quiera en cada sesión de tmux. En caso de que ayude a alguien más, aquí está:

#!/bin/bash TMUX_SESSION=mystuff TOP=~/mydir tmux new-session -s "$TMUX_SESSION" -n $(pwd) -d launch_my_window() { WINDOW=$1 NAME=$2 SUBDIR=$3 SCRIPT=$TMPDIR/tmux.sh.$WINDOW.$NAME tmux new-window -t "$TMUX_SESSION:$WINDOW" -n "$NAME" cat >$SCRIPT <<%% cd $TOP/$SUBDIR # do more stuff here %% chmod +x $SCRIPT tmux send -t "$TMUX_SESSION:$WINDOW" $SCRIPT ENTER sleep 1 } launch_my_window 1 "stuff" subdir1 launch_my_window 2 "morestuff" subdir2 launch_my_window 3 "yetmorestuff" subdir3 #... # Select window #1 and attach to the WINDOW tmux select-window -t "$TMUX_SESSION:1" tmux -2 attach-session -t "$TMUX_SESSION"


Puedes usar Teamocil en Teamocil lugar. Teamocil es una herramienta sencilla que se utiliza para crear automáticamente sesiones, ventanas y paneles en tmux con archivos YAML.


Tmuxinator también es muy bueno para esto. Básicamente creas archivos de configuración así:

# ~/.tmuxinator/project_name.yml # you can make as many tabs as you wish... project_name: Tmuxinator project_root: ~/code/rails_project socket_name: foo # Not needed. Remove to use default socket rvm: 1.9.2@rails_project pre: sudo /etc/rc.d/mysqld start tabs: - editor: layout: main-vertical panes: - vim - #empty, will just run plain bash - top - shell: git pull - database: rails db - server: rails s - logs: tail -f logs/development.log - console: rails c - capistrano: - server: ssh me@myhost

Luego puedes comenzar una nueva sesión con:

mux project_name

Lo he estado usando por un tiempo y he tenido una buena experiencia en su mayor parte.


Para aquellos que no instalan ruby tmuxp está disponible en Python y es compatible con los archivos de configuración de estilo Teamocil y Tmuxinator (tanto en yaml como en json).

Sin mencionar que hay una biblioteca muy dulce detrás de todo https://github.com/tony/libtmux

pip install --user tmuxp

agregue ~ / .local / bin / a su $ PATH para los programas de instalación de usuarios de Python

-

# ~/.tmuxp/workbench.yaml session_name: workbench windows: - name: workbench layout: main-vertical panes: - vim - pane - pane

-

tumxp load workbench