(Uma alternativa para minha resposta ).
Programas que esperam interação do usuário em / dev / tty em vez de apenas ler
stdin pode ser manipulado com o comando expect , que usa o tcl
língua. Por exemplo, supondo que você espera em / usr / bin / expect, crie
um arquivo setuserpw
segurando isto:
#!/usr/bin/expect -f
expect_user -re "(\[^ \]+) (\[^ \]+)\n"
set user $expect_out(1,string)
set pw $expect_out(2,string)
spawn passwd $user
expect "password:"
send "$pw\r"
expect "password:"
send "$pw\r"
expect eof
e não se esqueça de torná-lo executável
chmod +x ./setuserpw
O script lê stdin para duas palavras em uma linha e define variáveis user
e pw
para estes. Em seguida, ele executa (gera) o programa passwd
para o usuário,
conectando via pseudo tty (veja man pty
). Ele lê sua saída para um
prompt correspondente "senha:". Em seguida, envia a senha para o programa e
faz o mesmo novamente (assumindo que o programa lhe pede a senha duas vezes).
Por exemplo:
./setuserpw <<!
user1 passwd1
!
No seu caso, substitua passwd
por slappasswd
e verifique os prompts que
obter corresponder àqueles neste exemplo.