Há 12 anos

Há 12 anos

Acabei de instalar o tmux no Ubuntu 10.04 e tentei remapear a chave do prefixo C-acriando o arquivo ~/.tmux.confcom estas linhas:

set-option -g prefix C-a
unbind-key C-b

Ao iniciar o tmux, tanto regularmente quanto com -f ~/.tmux.conf, o prefixo é efetivamente o mesmo padrãoC-b

Não há erros ou avisos de qualquer tipo.

Alguma ideia do que há de errado com o carregamento do conf?

Responder1

O arquivo ~/.tmux.conf é carregado quando o servidor tmux é iniciado pela primeira vez. Portanto, se houver sessões tmux existentes, iniciar uma nova sessão tmuxnão resulta no recarregamento do arquivo .tmux.conf. Tente reiniciar o servidor tmux: Use o comando tmux list-sessionspara ver se há sessões existentes. Saia deles (por exemplo tmux attach, mate todas as janelas e saia). Depois que todas as sessões terminarem, tente tmuxnovamente. Desta vez, a religação deve funcionar.

Responder2

Para recarregar seu ~/.tmux.conf sem encerrar sua sessão, você pode simplesmente fazer:

<prefix> :source-file /absolute/path/to/your/.tmux.conf

onde <prefix>está <C-b>por padrão.

Responder3

execute dentro da sua sessão tmux:

tmux source-file /absolute/path/to/your/.tmux.conf

Responder4

Há 12 anos

Aheróideixei umaComente.

Funciona para mim™. Tente executar strace -s9999 -f -o tmux.strace tmux -c truee poste a saída do grep -C5 'tmux\.conf' tmux.strace. - Gilles 'SO- pare de ser mau' 14 de setembro de 2010 às 20:24

Uma master class em eufemismo

Sem alarde, eles deixaram cair uma única frase em um comentário que deveria ter sido, não apenasuma respostamas,a resposta. Não somentea respostapara esta questão, masa resposta de referênciapara uma classe inteira de perguntas.

Dividindo

O que strace -s9999 -f -o tmux.strace tmux -c truesignifica?

É como se fossem 2 comandos em 1. O comando principal é, tmuxmas recebe um "prefixo"/"wrapper" chamado strace. Isso é muito semelhante à execução time dfpara medir quanto tempo leva para executar o dfcomando.

strace -s9999 -f -o tmux.strace

$ man strace | grep -A1 ^NAME
NAME
       strace - trace system calls and signals

$ man strace | grep -EA10 '^ *DESCRIPTION($| )'
DESCRIPTION
       In the simplest case strace runs the specified command until it  exits.   It
       intercepts  and  records  the system calls which are called by a process and
       the signals which are received by a process.  The name of each system  call,
       its  arguments  and its return value are printed on standard error or to the
       file specified with the -o option.

       strace is a useful diagnostic, instructional, and  debugging  tool.   System
       administrators,  diagnosticians and trouble-shooters will find it invaluable
       for solving problems with programs for  which  the  source  is  not  readily
       available  since  they  do not need to be recompiled in order to trace them.

$ man strace | grep -EA4 '^ *-s($| )'
       -s strsize
       --string-limit=strsize
                   Specify the maximum string size to print (the  default  is  32).
                   Note  that  filenames  are not considered strings and are always
                   printed in full.

$ man strace | grep -EA6 '^ *-f($| )'
       -f
       --follow-forks
                   Trace child processes as they are created  by  currently  traced
                   processes as a result of the fork(2), vfork(2) and clone(2) sys‐
                   tem calls.  Note that -p PID  -f  will  attach  all  threads  of
                   process  PID  if  it  is  multi-threaded,  not  only thread with
                   thread_id = PID.

$ man strace | grep -EA8 '^ *-o($| )'
       -o filename
       --output=filename
                   Write the trace output to  the  file  filename  rather  than  to
                   stderr.   filename.pid  form  is used if -ff option is supplied.
                   If the argument begins with '|' or '!', the rest of the argument
                   is  treated as a command and all output is piped to it.  This is
                   convenient for piping the debugging output to a program  without
                   affecting  the redirections of executed programs.  The latter is
                   not compatible with -ff option currently.

tmux -c true

$ man tmux | grep -EA4 '^ *-c($| [^ ]*$)'
     -c shell-command
                   Execute shell-command using the default shell.  If necessary,
                   the tmux server will be started to retrieve the default-shell
                   option.  This option is for compatibility with sh(1) when tmux
                   is used as a login shell.

$ man true | grep -A1 ^NAME
NAME
       true - do nothing, successfully

Por que...

usar -ccom tmux?

Como realmente nos preocupamos apenas com o processo de inicialização do tmux, não precisamos usá-lo de forma interativa. Portanto, iremos instruí-lo a executar um comando no lugar do nosso shell interativo normal.

usar truecomo comando tmux?

Porque sai muito rapidamente e manterá nosso log curto.

usar -o tmux.stracecom strace?

É apenas um arquivo para armazenar a saída. Nomear as coisas é difícil. Não era importante combinar o nome base ou a extensão com qualquer outra coisa.

usar -fcom strace?

Presumo que você leu o trecho da página de manual e nãoredundar. Qualquer aplicativo razoavelmente complexo criará processos filhos. Como tmuxé magnificamente complexo, definitivamente queremos rastreá-los também.

usar -s9999com strace?

Como estamos gravando a saída em um arquivo, não precisamos de linha truncada para caber na largura do terminal. Defina-o grande. Trate de exibi-lo mais tarde se for um problema.

Por que fazernada disso?

Se porqualquer, você quer dizer escrever esta resposta longa ...

  1. Porque eu treino equipes de engenharia e irei indicar esta resposta.
  2. Porque Giles...
    • é um maldito herói
    • teve 0 votos positivos em seus comentários por mais de 10 anos
    • passou despercebido por muito tempo e me recuso a deixar isso continuar

Se você não entende por que esse processo éO caminhopara responder a uma pergunta como "Alguma ideia do que há de errado com o carregamento da conf?" então eu encaminharia você para oProblema XY

Não é sóquestionadoresque se enquadram no problema XY. Istoextremamentecomum para respostas para ~cometer esse erro~ faça isso também. Nesse caso, muitas respostas a esta pergunta instruem o leitor sobre como carregar/recarregar um arquivo de configuração após o início do processo. Isso sugere ignorar o fato de o processo não carregar o arquivo como deveria.

Se você chegou até aqui, o que quero que você aprenda é que só é correto ignorar uma falha se você:

  • passar por um bloqueador para que você possa se remover como bloqueador de outros
  • voltarei para corrigir o problema corretamente mais tarde

A conclusão

Muitos problemas podem ser resumidos em "O que há de errado com o carregamento do arquivo?". Essa pergunta deve despertar o sentido aranha na forma de "Ele está tentando carregar o arquivo? O que está acontecendo quando ele tenta?"

Você pode/deve[?] straceresolver qualquer coisa que possa ser questionada como:

  • O que esse processo está tentando fazer?
  • O que éistoexperimentando quando tenta fazer aquilo [coisa que está tentando fazer]?

Muitas vezes, énão é uma falha do processofazer uma coisa, masuma falha do usuárioesperando que o processo faça alguma coisa. E o processo passa por muitas coisas das quais o usuário não é informado.

Chega de pontificação abstrata. Vamos considerar um exemplo:

$ tmux kill-server; rm tmux.strace; strace -s9999 -f -o tmux.strace tmux -c true
no server running on /tmp/tmux-1000/default

$ ls -lh tmux*
-rw-r--r-- 1 bruno bruno  21K Jun 11 10:58 tmux-client-18358.log
-rw-r--r-- 1 bruno bruno 324M Jun 11 10:58 tmux-server-18360.log
-rw-r--r-- 1 bruno bruno 342K Jun 11 13:48 tmux.strace

$ grep 'tmux\.conf' tmux.strace
521744 readlink("/etc/tmux.conf", 0x7ffe2c0446d0, 1023) = -1 ENOENT (No such file or directory)
521744 readlink("/home/bruno/.tmux.conf", 0x7ffe2c0446d0, 1023) = -1 ENOENT (No such file or directory)
521744 readlink("/home/bruno/.config/tmux/tmux.conf", 0x7ffe2c0446d0, 1023) = -1 ENOENT (No such file or directory)

$ ls -lA /home/bruno/.config/tmux
-rw-r--r-- 1 bruno bruno 307 Jun 10 20:29 tmux.config

Você vê? Veja a saída dos 2 últimos comandos. Talvez ajudasse se eu mostrasse como conserto isso.

$ mv ~/.config/tmux/tmux.config \
    ~/.config/tmux/tmux.conf

$ tmux kill-server; rm tmux.strace; strace -s9999 -f -o tmux.strace tmux -c true
no server running on /tmp/tmux-1000/default

$ grep -A2 '\.config/tmux/tmux\.conf' tmux.strace
527872 openat(AT_FDCWD, "/home/bruno/.config/tmux/tmux.conf", O_RDONLY) = 8
527872 newfstatat(8, "", {st_mode=S_IFREG|0644, st_size=307, ...}, AT_EMPTY_PATH) = 0
527872 read(8, "set -sg escape-time 0\nset -g mode-keys vi\n\n# remap prefix from 'C-b' to 'C-f'\nset-option -g prefix C-f\nunbind-key C-b\nbind-key C-f send-prefix\n\n# split panes using | and -\nbind | split-window -h\nbind - split-window -v\n# bind \"\33OA\" # scroll natural up\n# bind \"\33OB\" # scroll natural down\nunbind '\"'\nunbind %\n\n", 4096) = 307

Nota: Essa última linha é todo o conteúdo do meu ~/.config/tmux/tmux.confarquivo (anteriormente nomeado incorretamente).

informação relacionada