Como adicionar um usuário unix / linux em um script bash

6

Aqui está o meu script de teste. Não consigo fazer isso funcionar. Estou vendo dois erros:

  1. Use of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
  2. Use of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.

Aqui está meu script:

#!/bin/bash
sudo adduser myuser << ENDX
password
password
First Last




Y
ENDX
exit 0

Aqui está a saída:

me@mycomputer$ ./adduser.sh 
Adding user 'myuser' ...
Adding new group 'myuser' (1001) ...
Adding new user 'myuser' (1001) with group 'myuser' ...
Creating home directory '/home/myuser' ...
Copying files from '/etc/skel' ...
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Changing the user information for myuser
Enter the new value, or press ENTER for the default
        Full Name []:   Room Number []:         Work Phone []:  Home Phone []:  Other []: Use of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
Use of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
Is the information correct? [Y/n] me@mycomputer$

Isso está no Kubuntu 12.04 LTS

$ bash --version
bash --version
GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)

Aqui estão as linhas de adduser (script de sistema - não modificado por mim) com notações dos dois números de linha relevantes:

for (;;) {
       my $chfn = &which('chfn');
    &systemcall($chfn, $new_name);
    # Translators: [y/N] has to be replaced by values defined in your
    # locale.  You can see by running "locale yesexpr" which regular
    # expression will be checked to find positive answer.
    print (gtx("Is the information correct? [Y/n] "));
    chop (my $answer=<STDIN>);        <-- LINE 589
    last if ($answer !~ m/$noexpr/o); <-- LINE 590
}
    
por MountainX 19.06.2013 / 01:22

2 respostas

23

Use apenas os parâmetros da linha de comando em vez de stdin e use chpasswd para a senha.

Por exemplo:

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd
    
por 19.06.2013 / 02:06
2

adduser chama o programa externo chfn para ler o nome completo e outras informações do usuário. chfn lê um buffer de entrada, incluindo não apenas o que precisa, mas a última linha Y . Quando adduser pede confirmação depois, a linha Y foi lida (mas ignorada) por chfn , portanto adduser vê um final de arquivo em sua entrada. Espera-se que a variável $answer contenha uma linha de entrada, mas porque não havia entrada para ler, ela é indefinida.

Como você está escrevendo um script, passa os dados (exceto a senha) na linha de comando .

    
por 19.06.2013 / 02:44

Tags