É possível usar a she-bang em oneliners?
Estou tentando executar esse script no link . um forro.
Se eu colocar isso em um arquivo, e executá-lo com ./file, ele funciona como esperado, mas como eu poderia executá-lo como oneliner?
Isso funciona como um script sem problemas.
#!/usr/bin/expect -f
spawn ssh [email protected]
expect "assword:"
send "mypassword\r"
interact
Como eu seria capaz de executar isso do oneliner?
Se eu tentar executar
spawn ssh [email protected]; expect "assword:"; send "mypassword\r"; interact
retorna:
bash: spawn: command not found
Se eu tentar executar
#!/usr/bin/expect -f; spawn ssh [email protected]; expect "assword:"; send "mypassword\r"; interact
então a coisa toda é tratada como um comentário e nada acontece.
EDITAR:
tentou executar o material sugerido nas respostas:
expect -c 'spawn ssh user@server "ls -lh /some/file"; expect "assword:"; send "mypassword\r"; interact'
retornou
bash: spawn: command not found
couldn't read file "assword:": no such file or directory
bash: send: command not found
bash: interact: command not found
expect: option requires an argument -- c
Ao executar:
$ cat << 'EOF' | /usr/bin/expect -
> spawn ssh user@server "ls -lh file"
> expect "assword:"
> send "password\r"
> interact
> EOF
Parece SSH para o servidor, mas não executa o comando, ou não produz nenhum resultado:
retorna:
spawn ssh user@server ls -lh file
user@server password
Quando executo o script:
./test
spawn ssh user@server ls -lh file
user@server's password:
-rw-rw-r-- 1 user user 467G Jan 2 00:46 /file
EDIT2:
O problema com o primeiro comando foi com backtick, em vez de aspas simples, seguindo o comando como esperado
expect -c 'spawn ssh user@server "ls -lh file"; expect "assword:"; send "mypassword\r"; interact'
: