2012-05-01 16 views
7

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

#!/usr/bin/expect -f 
set password [lrange $argv 0 0] 
set timeout -1 

clear 
echo "Updating Source..." 
cd sourcedest 
git pull -f origin master 

match_max 100000 
# Look for passwod prompt 
expect "*?assword:*" 
# Send password aka $password 
send -- "$password\r" 
# send blank line (\r) to make sure we get back to gui 
send -- "\r" 
expect eof 

git checkout -f master 
cp Config/database.php.bak Config/database.php 
cp webroot/index.php.bak webroot/index.php 
cp webroot/js/config.js.bak webroot/js/config.js 

मैं क्या गलत कर रहा हूं? http://bash.cyberciti.biz/security/expect-ssh-login-script/

+0

मान लीजिए कि आप स्पॉन भूल गए हैं। – bdecaf

+0

मैं उस भाग को नहीं चाहता हूं। मैं इसे अपनी स्थानीय मशीन के अंदर चला रहा हूं। – LordZardeck

+0

कोई गिट, सीडी और सीपी मान्य मान्य आदेश नहीं हैं। इसके लिए आपको एक खोल खोलने की जरूरत है। – bdecaf

उत्तर

16

यह काफी मेरे अपने के कुछ टिप्पणियों के साथ, टिप्पणियों से लिया जाता है: यहाँ साइट मैं से समझ में आ गया है। लेकिन कोई भी नहीं, इस के लिए एक असली जवाब प्रदान करना चाहते हैं लगता है इसलिए यहाँ जाता है:

आपकी समस्या आप एक स्क्रिप्ट की उम्मीद है और आप इसे एक बैश स्क्रिप्ट की तरह का इलाज कर रहे हैं। उम्मीद पता नहीं है क्या cd, cp, और git मतलब है। बैश करता है आप जो चाहते हैं वह एक बैश स्क्रिप्ट है जो उम्मीद करने के लिए कॉल करता है। उदाहरण के लिए:

#!/usr/bin/env bash 

password="$1" 
sourcedest="path/to/sourcedest" 
cd $sourcedest 

echo "Updating Source..." 
expect <<- DONE 
    set timeout -1 

    spawn git pull -f origin master 
    match_max 100000 

    # Look for passwod prompt 
    expect "*?assword:*" 
    # Send password aka $password 
    send -- "$password\r" 
    # send blank line (\r) to make sure we get back to gui 
    send -- "\r" 
    expect eof 
DONE 

git checkout -f master 
cp Config/database.php.bak Config/database.php 
cp webroot/index.php.bak webroot/index.php 
cp webroot/js/config.js.bak webroot/js/config.js 

हालांकि, जैसा कि लार्स ने टिप्पणियों में बताया, आप एसएसएच कुंजी का उपयोग करना बेहतर हो सकते हैं। फिर आप expect कॉल से पूरी तरह से छुटकारा पा सकते हैं।

+0

यह मेरे लिए काम किया! आपको बहुत - बहुत धन्यवाद! – Deano