Linux Bash O operador “|” não funciona - o que estou fazendo errado?

1

Estou tentando verificar a senha do usuário por meio de um comando de login como este:

# echo "name\npassword" | login  

mas o comando termina sem escrever nada. echo termina por causa do SIGPIPE. Por que login parou antes de pedir nome e senha?

Quando faço o mesmo com o comando passwd , funciona:

# echo "password\npassword" | passwd  
Enter new UNIX password: 
Retype new UNIX password:
passwd: password updated successfully 

Eu tenho o Ubuntu 12.04 e o Bash 4.2.25

    
por user3490702 03.04.2014 / 21:41

1 resposta

9

O comando de login lê a entrada do terminal em vez de aceitá-lo como entrada via pipe (STDIN).

Se você quiser fazer o script login , pode usar o utilitário expect :

#!/usr/bin/expect

spawn "login"

expect "login:" { send "mtak\r" }
expect "Password:" { send "mypassword\r" }

interact

Cole isso em um arquivo, execute chmod +x script.ex e execute-o com ./script.ex

    
por 03.04.2014 / 22:04