Estou copiando e colando sequências de comandos do shell no meu emulador de terminal e estou confuso com o comportamento.
- Quando colo a linha única,
ssh user@remote "echo foo"; echo baz
o computador faz o que eu espero. Ele executa o comando SSH e, em seguida, ecoa algo depois que eu terminei minha sessão SSH. - Quando coloco a mesma coisa que um comando de várias linhas, no entanto, isso não acontece.
ssh user@remote "echo foo" eco baz
Ainda recebo a sessão SSH, masecho baz
desaparece completamente. Nenhum comando é executado. - Isso parece ser algo a ver com SSH, pelo menos. Porque substituir o SSH por outra coisa produz o comportamento que eu estava esperando. Ambos os comandos são executados quando colo isso, por exemplo:
eco foo eco baz
Então o que está acontecendo? Para onde está indo a entrada colada? Por que o comando echo não é executado por nada ? Como isso está relacionado ao SSH?
(A propósito: eu conheço o método Ctrl+ X, Ctrl+ E, mas às vezes, especialmente ao usar emuladores de terminal no Windows, isso não funcionará imediatamente.)
Tente colar isso:
Você verá
>>echo bar<<
como saída doecho
servidor.Isso significa que
ssh
vai comer os dados colados em sua entrada padrão, como se você tivesse feitoA solução para isso, além de nunca colar comandos shell no terminal para executá-los, é usar
ssh -n
, que redirecionará/dev/null
parassh
:Infelizmente, não conheço a mecânica de colagem, então não posso dizer nada inteligente sobre por que os dados colados acabam no fluxo de entrada padrão de
ssh
, mas acho que tem a ver com o fluxo sendo herdado do interativo shell (que lê comandos da entrada padrão).Usar
ssh -n
também é a solução (ou pelo menos uma solução) para a questão daAqui, o loop será executado apenas uma vez, pois
ssh
consome os dados deinputfile
.