Se eu entendi corretamente, você tem um pipeline que gera uma lista de nomes de host ( ec2-describe-instances … | grep … | grep …
), você pega a primeira linha ( head -1
) e deseja usá-lo como o nome do host ao qual se conectar. Você está passando o nome do host na entrada padrão da função sshec2
e chamando a função sem nenhum argumento. Portanto, quando a função é executada, $argv[1]
está vazio e você acaba executando ssh
com os argumentos -i
, /home/dearrrfish/.ssh/key.pem
, -t
, -t
, ubuntu@
. Se você tiver terminado com uma linha de comando ssh
válida e a conexão tiver passado, a saída do … | head -1
pipeline será canalizada para o programa que ssh
executa.
Você precisa passar o nome do host como o primeiro argumento para a função. A ferramenta para isso é substituição de comandos .
sshec2 (ec2-describe-instances --region us-west-2 --filter "tag:Name=test-box" |
grep 'INSTANCE' |
grep -E -m 1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' |
head -1)