use she-bang no oneliner

0

É 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'

:

    
por rAlen 02.01.2016 / 01:13

2 respostas

3

Como one-liner, você passaria o script como o argumento para expect -c

expect -c 'spawn ssh [email protected]; expect "assword:"; send "mypassword\r"; interact'

Note que as aspas do shell são '...' e "..." , e as aspas correspondentes do expect são {...} e "..." , então há alguma flexibilidade para passar vars de shell e assim por diante.

Mas isso rapidamente se torna ilegível e insustentável.

    
por 02.01.2016 / 01:32
1

expect pode ler seu script a partir da entrada padrão:

cat << 'EOF' | /usr/bin/expect -
spawn ssh [email protected]
expect "assword:"
send "mypassword\r"
interact
EOF
    
por 02.01.2016 / 01:26

Tags