Executando o cd em muitos terminais macOS com um comando

0

Eu geralmente abro duas ou três janelas do terminal do macOS em uma configuração lado a lado. Às vezes, quero cd em um diretório específico em todos eles.

A melhor ideia é tentar escrever para /dev/ttys00* , por exemplo,

echo -ne "echo hello\x0a\x0d" > /dev/ttys000

Isso será exibido no outro terminal, mas os bytes no final não estão acionando o comando para ser aceito. Existe uma sequência de bytes que faz isso? (Não me surpreenderia se não houvesse, por motivos de segurança.) Btw, você pode executar tty para descobrir a qual dispositivo uma determinada janela está mapeada.

Eu também tentei definir a variável $PWD , mas não parece realmente mudar o diretório.

    
por mgold 28.10.2016 / 06:43

1 resposta

1

This will show up on the other terminal but the bytes at the end aren't triggering the command to be accepted.

Todo dispositivo tty tem duas extremidades, como um tubo. O que você escreve em uma extremidade não faz o loop , mas sai pela outra extremidade. Por exemplo, com portas seriais, você tem /dev/ttyS* em uma extremidade e a porta serial física na outra extremidade. O que você escreve para /dev/ttyS0 é enviado pelo fio.

Da mesma forma, para pseudo-terminais (ptys), você tem /dev/ttys* indo para um dispositivo "pty master" sem nome que é gerenciado pelo aplicativo terminal. Quando você escreve algo em /dev/ttys000 , ele é não recebido pelo shell como entrada, porque o shell está anexado ao lado same 'slave' do arquivo . Em vez disso, a gravação é recebida pelo terminal app que mantém o mestre pty correspondente 'fd e mostrado como se fosse uma saída do programa .

(Alguns BSDs antigos, em que os ptys são denominados /dev/ttyP* , têm um dispositivo /dev/ptyP* correspondente para o terminal principal, mas não acho que o macOS tenha um equivalente. O Linux certamente não - sempre que abrir /dev/ptmx lá, você tem um par de pty novo alocado.)

Então, como conseguir o que você quer?

  • Você pode tentar encontrar uma seqüência de escape que peça ao terminal para retornar algo como entrada. Aquilo costumava existir (por exemplo, havia uma sequência "diga-me o título da janela atual"), mas quase todos os terminais a desativavam por motivos de segurança: por exemplo, se você co% de% um arquivo malicioso, poderia definir o título do terminal e imediatamente pedir de volta, executando assim um comando.

  • Você poderia pedir ao kernel para falsificar a entrada. No Linux, há cat , que pode ser usado por ferramentas como writevt ; faz retornar a entrada a todos os outros programas conectados ao mesmo fim de um tty. Não tenho certeza se funciona no macOS.

  • Você pode procurar outros métodos de automação. Se bem me lembro, o macOS tem o aplicativo "Automator" e o AppleScript . Outros sistemas podem ter ferramentas que se ligam aos recursos de acessibilidade (como um teclado virtual faria).

por 28.10.2016 / 09:02