web-dev-qa-db-ja.com

bashスクリプトにunix / linuxユーザーを追加する方法

これが私のテストbashスクリプトです。それを機能させることができません。 2つのエラーが表示されます。

  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.

これが私のスクリプトです:

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




Y
ENDX
exit 0
_

出力は次のとおりです。

_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$
_

これはKubuntu 12.04 LTSにあります

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

Adduser(システムスクリプト-私が変更していない)の行と、関連する2つの行番号の表記を次に示します。

_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
}
_
9
MountainX

Stdinの代わりにコマンドラインパラメータを使用し、パスワードにchpasswdを使用するだけです。

例えば:

Sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | Sudo chpasswd
29
jelle foks

adduserは、外部プログラムchfnを呼び出して、氏名とその他のユーザー情報を読み取ります。 chfnは、必要なものだけでなく、最後のY行を含む、入力のバッファフルを読み取ります。 adduserが後で確認を求める場合、Ychfnによって読み取られた(ただし無視された)ため、adduserは入力でファイルの終わりを確認します。 。変数$answerには入力行が含まれていると想定されていますが、読み取る入力がなかったため、未定義です。

スクリプトを作成しているので、 コマンドラインでデータ(パスワードを除く)を渡します です。