tmux equivalente do comando 'at' da tela?

3

GNU screen tem um comando, at , que permite controlar outras sessões enviando comandos screen para elas. O tmux tem algo assim? Eu tentei send-prefix e send-keys , mas aqueles mandaram chaves para o processo rodando dentro tmux; você não pode usá-los para controlar o próprio tmux.

Tentando enviar um comando de controle fazendo algo assim:

send-keys -t main:1 "tmux select-window -t :1" ENTER

não funciona se o processo interno for algo diferente de um shell. E também falhará se você estiver enviando as chaves de uma sessão vinculada, mesmo quando o processo interno for um shell. (Nesse caso, sua sessão atual é a afetada.)

    
por Kurt Hutchinson 22.02.2012 / 01:54

1 resposta

2

Embora seja opcional, o especificador de janela de destino que os comandos da janela tmux aceitam (ou seja, para suas opções -t e -s ) pode especificar diretamente uma janela em qualquer sessão. A sintaxe de uma janela de destino funciona assim:

  • sessão : janela onde
    • sessão é
      • o especificador de um cliente (especifica a sessão atual desse cliente) ou
      • um exato, prefixo ou fnmatch (3) (ou seja, "glob") corresponde a um nome de sessão e
    • janela é
      • um índice de janela ou
      • um exacto, prefixo ou fnmatch (3) para um nome de janela em sessão .
  • janela (somente se não houver dois pontos no especificador) onde
    • janela é como acima, exceto que é restrito à sessão atual.

O segundo formulário é provavelmente o formulário mais usado, mas parece que você quer o primeiro formulário no seu caso.

Você deve conseguir executar este comando:

tmux select-window -t main:1

de qualquer lugar para alcançar seu objetivo. Por exemplo, ele funcionará a partir de um script de shell que é executado completamente fora do contexto de uma sessão tmux (por exemplo, via cron ) - contanto que você forneça qualquer não padrão -L ou -S tmux valores de opção para que o comando possa localizar o soquete do servidor.

Você também pode fazer isso como uma ligação (por exemplo, em um arquivo ~/.tmux.conf ou em um prompt tmux : ; ajuste o especificador de chave como desejado):

bind-key C-m select-window -t main:1

Em seguida, você pode digitar seu Prefixo e C-m em qualquer cliente anexado a qualquer sessão em qualquer servidor que tenha essa ligação e alterará a sessão que corresponde main à sua janela no índice 1.

A sintaxe de "especificador de destino" é descrita na seção "Comandos" da página de manual tmux (pesquisa pela primeira ocorrência de target-client , target-session , target-window ou target-pane para encontrar as descrições relevantes).

Eu nunca usei o comando at do screen , mas também parece que ele possui recursos de iteração. No momento, não há correspondência direta para isso em tmux , mas deve ser bastante fácil "criar script" analisando a saída de list-clients , list-sessions , list-windows e list-panes ( versões mais recentes do tmux têm a opção -F para esses comandos que podem ajudar a gerar uma saída mais fácil de analisar.

    
por 22.02.2012 / 21:26

Tags