useradd trabalha interativamente, mas não no script bash

1

Estou tentando automatizar a criação de contas de usuário.

Os comandos neste script funcionam bem interativamente no shell bash, no entanto, quando executo este script, ele falha e recebo um retorno de 2, que significa invalid command syntax , de acordo com a página man useradd.

Este script também imprime o comando antes de executá-lo, então se eu simplesmente copiar / colar essa saída (sem o "cmd-->" ), ele funciona.

Por exemplo, cmd-->useradd bidwbre -m -c "Brent Bidwel" -G students Aqui está o script curto:

#!/bin/bash

while read id fn ln pw
do
     echo "cmd-->useradd $id -m -c \"$fn $ln\" -G students"
     useradd $id -m -c \"$fn $ln\" -G students
     echo $?

    # chmod go-rx /home/$id
    # echo "$id:$pw" | chpasswd
    echo ""
done

Estou executando este logado como root, aqui estão as permissões no arquivo.

-rwxr-x---. 1 root root 1339 Aug 2 14:58 rh_make_accts.sh*

O que estou perdendo aqui?

Red Hat 7.3 Enterprise Linux

PS: Algo não relacionado, mas desde que eu já estou perguntando: O que é esse período no diretório longo no final das permissões? Não é algo que eu já vi antes - específico para RH?

    
por Levon 02.08.2017 / 21:28

1 resposta

1

Remova as duas barras invertidas na linha useradd ou, em outras palavras, não escape das aspas.

useradd $id -m -c "$fn $ln" -G students

PS: o ponto

GNU Coreutils: What information is listed

-l, --format=long, --format=verbose

...

Following the file mode bits is a single character that specifies whether an alternate access method such as an access control list applies to the file. When the character following the file mode bits is a space, there is no alternate access method. When it is a printing character, then there is such a method.

GNU ls uses a ‘.’ character to indicate a file with a security context, but no other alternate access method.

A file with any other combination of alternate access methods is marked with a ‘+’ character.

    
por 02.08.2017 / 21:34