कैसे एक बैश स्क्रिप्ट में एक यूनिक्स / लिनक्स उपयोगकर्ता जोड़ें


9

यहाँ मेरा टेस्ट बैश स्क्रिप्ट है। मैं इसे काम करने में सक्षम नहीं हूं। मैं दो त्रुटियां देख रहा हूं:

  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$

यह कुबंटू 12.04 एलटीएस पर है

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

यहाँ दो प्रासंगिक लाइन नंबरों के नोटेशन के साथ एड्यूसर (मेरे द्वारा अनमॉडिफाइड सिस्टम स्क्रिप्ट) की लाइनें दी गई हैं:

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
}

जवाबों:


31

बस स्टैड के बजाय कमांड लाइन के मापदंडों का उपयोग करें, और पासवर्ड के लिए chpasswd का उपयोग करें।

उदाहरण के लिए:

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd

2

adduserchfnपूरा नाम और अन्य उपयोगकर्ता जानकारी पढ़ने के लिए बाहरी प्रोग्राम को कॉल करता है । chfnन केवल जो इसकी आवश्यकता है, बल्कि उस अंतिम Yपंक्ति सहित, इनपुट का एक बफरफुल पढ़ता है । जब adduserबाद में पुष्टिकरण के लिए पूछा जाता है, तो Yलाइन को पढ़ा (लेकिन अनदेखा किया गया है) chfn, इसलिए adduserइसके इनपुट पर फ़ाइल का अंत देखा जाता है। चर $answerमें इनपुट की एक पंक्ति शामिल होने की उम्मीद है, लेकिन क्योंकि पढ़ने के लिए कोई इनपुट नहीं था, यह अपरिभाषित है।

चूंकि आप एक स्क्रिप्ट लिख रहे हैं, कमांड लाइन पर डेटा (पासवर्ड को छोड़कर) पास करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.