2013-02-03 47 views
36

में उपयोगकर्ता इनपुट को अनुकरण करें मैं अपनी खुद की बैश स्क्रिप्ट बना रहा हूं, लेकिन मैं इस समय अटक गया हूं। असल में, स्क्रिप्ट का उपयोग CentOS में सर्वर सेटअप स्वचालित करने के लिए किया जाएगा। कुछ सॉफ्टवेयर सामान्य रूप से उपयोगकर्ता को पासवर्ड टाइप करने के लिए कहते हैं। मैं चाहता हूं कि स्क्रिप्ट उस पासवर्ड को डालने के लिए करे जिसे मैंने उपयोगकर्ता से पूछने के बजाय एक चर के रूप में जेनरेट किया है और संग्रहीत किया है।बैश स्क्रिप्ट

जब संदेश "नया पासवर्ड:" संदेश स्थापित होने के दौरान प्रकट होता है, तो मैं स्क्रिप्ट को वैरिएबल $key में संग्रहीत मान कैसे रख सकता हूं जैसे कि उपयोगकर्ता ने इसे एक बैश स्क्रिप्ट के साथ टाइप किया था?

उत्तर

38

आपको 'उम्मीद' कमांड करना चाहिए जो आपको करने की ज़रूरत है। यह व्यापक रूप से उपलब्ध है। यहाँ एक उदाहरण के लिए देखें: http://www.thegeekstuff.com/2010/10/expect-examples/

(बहुत किसी न किसी उदाहरण)

#!/usr/bin/expect 
set pass "mysecret" 

spawn /usr/bin/passwd 

expect "password: " 
send "$pass" 
expect "password: " 
send "$pass" 
+0

हाँ, मैं बहुत उम्मीद करता हूं! – Napolux

+0

दोस्त यहां "नया पासवर्ड:" दिखाई देता है जबकि स्क्रिप्ट यम के साथ सामान स्थापित कर रही है (उदाहरण के लिए mysql}। क्या आप मुझे इस विशेष मामले के लिए एक कोड स्निपेट दिखा सकते हैं। मैं ज्यादातर से अधिक उपयोग करता हूं और अब तक कभी भी उम्मीद नहीं करता था। आपके द्वारा प्रदान किया गया ट्यूटोरियल, ऐसा लगता है कि जब आप उपयोगकर्ता को – Werulz

+1

दर्ज करना चाहते हैं तो उम्मीद का उपयोग कर सकते हैं '#!' लाइन देखें - यह एक उम्मीद * स्क्रिप्ट * है। पूरी चीज 'उम्मीद' से चलती है, न कि 'bash' , इसलिए यह एक्सपेक्ट लैंग्वेज (जो मूल रूप से टीसीएल है) में लिखा गया है। महत्वपूर्ण आदेश वहां हैं - जिस कमांड के साथ आप बातचीत कर रहे हैं उसे शुरू करने के लिए 'स्पॉन', 'उम्मीद' को एक विशिष्ट स्ट्रिंग भेजने के लिए प्रतीक्षा करें, और 'भेजें एक उत्तर भेजने के लिए। अगर आप उपयोगकर्ता को नियंत्रण वापस चालू करना चाहते हैं, तो आप 'इंटरैक्ट' के साथ ऐसा कर सकते हैं। –

2

यहाँ कोड का एक टुकड़ा मैं y स्क्रिप्ट के लिए लिखा उपयोगकर्ताओं की पासवर्ड के लिए पूछना है और उन्हें/etc/पासवर्ड में स्थापित करने के लिए है। आप जो चाहते हैं उसे प्राप्त करने के लिए आप इसे थोड़ा सा उपयोग कर सकते हैं:

echo -n " Please enter the password for the given user: " 
read userPass 
useradd $userAcct && echo -e "$userPass\n$userPass\n" | passwd $userAcct > /dev/null 2>&1 && echo " User account has been created." || echo " ERR -- User acount creation failed!" 
+0

आप लोग मुझे गलत समझ रहे हैं। मैं उपयोगकर्ता इनपुट को पढ़ना नहीं चाहता हूं। मैं बस इतना करना चाहता हूं कि जब (yum इंस्टॉल करें) पासवर्ड के लिए उपयोगकर्ता इनपुट की आवश्यकता होती है, तो उसे * वैरिएबल में वैल्यू * – Werulz

+0

कुछ इनपुट करने के लिए उपयोगकर्ता से पूछने के बजाय इनपुट के रूप में $ कुंजी जब इंस्टॉल के दौरान "नया पासवर्ड:" प्रॉम्प्ट दिखाई देता है, तो – Werulz

+0

पास करने के रूप में $ कुंजी में मान सेट करें, केवल उम्मीद ही काम करेगी। उदाहरण के लिए, जब मैं बाहरी प्रोग्राम उपयोगकर्ता से इनपुट मांगता हूं तो मैंने मूल्य को पारित करने की अपेक्षा की थी। जैसे कि जब मैं अपने एसएसएच-एजेंट को अपनी एसएसएच कुंजी जोड़ना चाहता हूं, तो मैं उम्मीद के माध्यम से पास-वाक्यांश को एसएसएच-एड में स्वचालित रूप से पास करता हूं। – kevoroid