Os dois comandos no loop while precisam ser executados como root, portanto, adicione sudo
s ou salve isso como um script bash e execute isso com sudo
(provavelmente preferível).
awk -F ':| ' '{print $1, $2, $3}' users.txt |
while read user password homedir; do
adduser --home "$homedir" "$user"
echo "$password" | passwd "$user" --stdin
done
Como alternativa, você pode fazer mais em awk
. Podemos imprimir todo o comando:
$ awk -F ':| ' '{ print("adduser --home", $3, $1"; echo", $2 " | passwd", $1) }' users.txt
adduser --home /home/almacen1 Jperez; echo 1234 | passwd Jperez
adduser --home /home/contabilidad1 Lgomez; echo 1234 | passwd Lgomez
adduser --home /home/almacen2 Pfernandez; echo 1234 | passwd Pfernandez
adduser --home /home/direccion1 Mramos; echo 1234 | passwd Mramos
E então é só canalizar tudo isso em um shell (durante a execução):
$ awk -F ':| ' '{ print("adduser --home", $3, $1"; echo", $2 " | passwd", $1) | "/bin/bash" }' users.txt
adduser: Only root may add a user or group to the system.
passwd: user 'Jperez' does not exist
adduser: Only root may add a user or group to the system.
passwd: user 'Lgomez' does not exist
adduser: Only root may add a user or group to the system.
passwd: user 'Pfernandez' does not exist
adduser: Only root may add a user or group to the system.
passwd: user 'Mramos' does not exist
Obviamente, você precisaria rodar o código acima com sudo
(ou como root) para que ele seja executado (é por isso que está causando erros de vômito). Você poderia usar o comando awk
system()
, mas você teria que gastar mais tempo concatenando as strings. print()
torna isso realmente simples, então eu fui com isso.
Apenas para esclarecimento, com isso quero dizer sudo awk -F ':| ' '{ print("adduser --home", $3, $1"; echo", $2 " | passwd", $1) | "/bin/bash" }' users.txt