Existe uma maneira de fazer um script Bash inserir um determinado pressionamento de tecla?

1

Existe alguma maneira de fazer com que um script bash insira um determinado pressionamento de tecla? O que estou tentando realizar aqui é um script que irá executar Ctrl + B para sair do tmux .

EDIT: Eu vejo que várias pessoas estão dizendo que é melhor usar um comando específico do programa. E se eu quisesse editar um arquivo de texto (nesse caso o arquivo bash_aliases) usando um script bash?

    
por evamvid 01.02.2014 / 05:19

5 respostas

5

Se você quiser interagir com tmux em um script, é aqui que você deseja usar tmux ... tmux-command . Como:

tmux kill-session

Para sair da sessão atual.

tmux kill-server

Para sair do servidor (mata todas as sessões).

tmux detach-client

para desanexar um cliente (sair, mas você pode reconectar mais tarde).

    
por 01.02.2014 / 09:09
4

Você pode usar xdotool para enviar pressionamentos de teclas, se for realmente necessário.

xdotool search "Konsole" windowactivate --sync key --clearmodifiers ctrl+b
    
por 01.02.2014 / 06:01
2

Para responder à pergunta no título.

A maneira de simular uma tecla pressionada em um terminal é através do TIOCSTI

Por exemplo:

insert() {
  perl -le 'require "sys/ioctl.ph";
            ioctl(STDIN, &TIOCSTI, $_) or
              die "$!\n" for split "", join " ", @ARGV' "$@"
}

No entanto, no caso de tmux , se você fizer isso:

insert $''

dentro de um painel tmux , que irá inserir o caractere ^B no buffer de entrada do terminal daquele painel, não qualquer um dos terminais anexados à sessão atual tmux está lendo sua entrada de.

A solução seria:

insert $'' < "$(tmux lsc -F '#{client_tty}' -t '' | head -n 1)"

Onde:

tmux lsc -F '#{client_tty}' -t ''

informa o (s) terminal (s) conectado (s) à sessão de corrida.

Mas em sistemas Linux modernos, isso não funcionará (você receberá um erro Operação não permitida ) porque, por motivos de segurança, o TIOCSTI ioctl só pode ser emitido para seu controlando o terminal (e o terminal de controle de um shell interpretando um script em um painel tmux seria o terminal do painel).

Você teria que perguntar a tmux para fazer isso, e não tenho certeza de que isso é possível.

    
por 01.02.2014 / 09:40
1

Você pode facilmente fechar o tmux executando:

pkill -term tmux

Isto irá enviar o tmux: "Por favor, feche você mesmo"

    
por 01.02.2014 / 05:57
0

Outra útil ferramenta * NIX para automatizar interações com programas terminais é:

link

    
por 01.02.2014 / 06:45