patrickpcs
(usa Nenhuma)
Enviado em 16/08/2017 - 13:47h
Já tentou aspas duplas na ultima linha do seu script? Se a senha da pessoa conter espaçamentos pode levar a uma mal interpretação pelo comando.
#!/bin/bash
read -p "Nome do usuário: " nome
read -p "Senha: " pass
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
htpasswd -i /etc/squid3/passwd "$nome" "$pass"
Não sei ao certo o que está sendo feito na linha 4 (iniciada com "pass=$")
Uma coisa interessante de se usar no comando read é o parametro -s (secret--silent)
Veja o que diz o help read (se usar o read integrado do bash
-s do not echo input coming from a terminal
É ideal para ler senhas uma vez que não exibe na tela o que está sendo escrito..
Então eu colocaria da seguinte forma só por boa prática;
read -p "Nome do usuário: " nome
read -sp "Senha: " pass
Parece que temos um erro de sintaxe aqui. Se você ler atentamente ele diz que a opção -i é usada para receber a senha pelo stdin.
Mas você está informando a senha pela linha de comando, então deverias usar como está explicado no próprio exemplo a opção -b.
-b Use the password from the command line rather than prompting for it.
Se você quer muito usar a opção -i, então poderíamos usar o echo por exemplo;
echo "senhadefulano" | htpasswd -i .................
Outra coisa que ainda me perturba são as seguintes linhas;
read -p "Senha: " pass
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
Tenho uma impressão de que há erros aqui. Parece que vc está se referindo a uma variável errada. Ao meu ver não importa o valor que for informado como senha pelo andamento dessas duas linhas. Uma hora você está trabalhando com a variável "pass" e outra hora com a variável "password". É ignorância minha? Estou em dúvida.