Iterm2: Automatize o envio de texto para o shell no início

3

Usando os perfis, você pode enviar um texto para o shell no início de uma sessão, em "enviar texto no início". Eu gostaria de fazer isso 3 vezes seguidas, mas parece que há apenas uma string permitida. Alguém sabe de alguma outra maneira de fazer isso usando o iterm2? Eu acredito que posso usar o applescript, mas eu prefiro ser capaz de iniciar uma sessão usando o iterm2 diretamente.

Ex:

<terminal session starts>
ssh server
send "asdf"
send "qwer"
send "zxcv"
(done...)

O motivo pelo qual não posso simplesmente definir um perfil para fazer isso é que meu trabalho tem um ambiente especial que geralmente faz três perguntas. Eu quero automatizar respondendo essas 3 perguntas e configurá-las para a configuração do perfil iterm2 em "send text at start".

    
por barrrista 13.01.2014 / 07:37

2 respostas

3

Existe uma ferramenta chamada Expect que faz handshaking generalizado e comunicação que você pode usar, no entanto, o iTerm2 pode fazer um pouco do que o Expect faz diretamente da aba Avançado.

Nota: A expectativa é escrita em TcL, uma linguagem incrível para se conhecer por direito próprio. Esta questão em particular é, provavelmente, explicitada com uma resposta bem comentada em um FAQ esperado em algum lugar. Além disso, se você escolher implementar uma solução com Expect over iTerm2, poderá usar essa solução em mais do que seu host OSX. Então pense sobre esse assunto na frente. No curto prazo, a opção iTerm2 Triggers fará o truque para você.

Assim, para fornecer um pouco do que o Expect fornece diretamente do iTerm2, vá para a guia Advanced. Lá você encontrará o recurso Triggers. A partir daí, você pode adicionar "+" a uma regra de acionador específica. Em suma, o que esses gatilhos (e Expect) permitem fazer é filtrar todo o texto de e para o Terminal, combinar esse texto com o gatilho de expressões regulares (ReEx) especificado pelo usuário e quando esse ReEx é correspondido no fluxo de texto do Terminal. , o iTerm2 irá realizar uma tarefa especificada pelo usuário.

Aqui está uma regra de disparo que corresponderá a uma linha contendo exatamente uma palavra, Senha e, em seguida, Enviar texto: minha senha.

Lembre-sedequeofluxodeTextodoTerminalcontémcaracteresinvisíveiseespecificaroReExexatoparacorresponderpodeserumdesafio,especialmenteporque,porexemplo,servidoresdiferentesimplementamseparadoresdelinhasdiferentese,seumReExusaespecificamenteum,elepodenãocoincidesemmotivoaparente.

Umacoisa:estoupensandoemporquevocêpodeestarfazendoestapergunta?Nãotenhocertezadoquevocêestáfamiliarizado,massevocêquiserfazerologinautomáticoviassh,adicioneumcomentário,econfigurarissoéfácil.Sevocêinvestirnisso,procureporpalavras-chave"ssh-keygen" e "generate rsa public keys for ssh."

Eu sei que este é um comentário, mas eu pensei em jogar isso lá fora, já que eu já tenho o espaço - pelo que vale:

Eu acho que seria usado o Send text at start: para definir variáveis de ambiente que são relevantes para a sessão do host remoto. Por exemplo, eu usei esse método para passar parâmetros para meus processos remotos como meio de passar parâmetros através de variáveis de ambiente. Não tenho certeza, mas isso seria um uso desse campo Command para adaptar o que acontece quando um ssh userid@hostname específico é executado.

Veja a segunda resposta em É possível obter o SSH para encaminhar argumentos vazios? para o exemplo completo, mas tudo se resume à seguinte sintaxe:

$ ssh me@localhost 'VAR1="var1 text" /tmp/try.pl'

Eu especulo que um uso potencial da opção Send text at start: é fornecer o VAR1="var1 text" /tmp/try.pl , ou simplesmente, o VAR="var1 text" para o ambiente do processo remoto.

Aqui está um exemplo mais concreto do zero usando um host Mac Dual-G5 chamado, r2d2:

Veja como eu configurei o perfil do r2d2:

Agora,quandoeuchutodeumr2d2iTerm2eecho$FRED,vejoquequalquercomandoqueeuteriachamadoalaosshpoderiaexaminaroambienteedeterminarumcontextoparaexecução:

É claro que isso é especulação, dado o que eu experimentei, então é apenas uma possibilidade. Agora sei que vou poder explorar esse caminho de controle, então obrigado pela pergunta.

    
por 19.01.2014 / 18:01
0

Você também pode ter um script como ~/test.py

#!/usr/local/bin/python3

print("echo hello world")

E, em seguida, execute este script como um coprocesso no menu iTerm2 Sessão- > Execute o Co-Process e especifique o script como ~/test.py

Eu acho que é necessário tornar seu script executável (embora eu não tenha tentado de outra forma), chmod +x ~/test.py .

Codificação feliz!

    
por 09.08.2018 / 17:14

Tags