2011-07-08 17 views
5

का उपयोग करते समय उद्धरण से बचने के लिए मैं अपने PHP ऐप्स के लिए एक सरल तैनाती स्क्रिप्ट बनाने की कोशिश कर रहा हूं। मुझे पता है कि इस नौकरी (कैपिस्ट्रानो, फ़िंग, इत्यादि) के लिए कई टूल हैं लेकिन वे मेरे सरल तैनाती दिनचर्या के लिए बहुत सारे काम की तरह लगते हैं।एसएसएच

मैं अपना पासवर्ड बार-बार टाइप करने से बचने के लिए sshpass का उपयोग करता हूं। लेकिन मेरे संपीड़ित इंस्टॉलर को अपलोड करने के बाद, मुझे सर्वर में ssh करने और कुछ कमांड चलाने की आवश्यकता है। इनमें से एक sed है। तो, उद्धरण मेरी लिपि तोड़ रहे हैं। यह कुछ इस तरह है:

 
sshpass -p foo ssh [email protected] " 
    cd /www/htdocs/foo/bar 
    echo 'Untar and remove installer' 
    tar -zxf install.tar.gz 

    sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');" index.php > tmp && mv tmp index.php 
    sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/" admin/index.php > tmp && mv tmp admin/index.php 

" 

आप देख सकते हैं, मैं डबल उद्धरण चिह्नों का उपयोग मेरी SSH बयान शुरू करने के लिए, लेकिन मैं यह भी sed पर उन्हें इस्तेमाल करने की जरूरत है।

किसी भी सुझाव की सराहना की जाएगी। धन्यवाद!

उत्तर

6

आंतरिक उद्धरण चिह्नों से बचने का सामान्य तरीका सामान्य तरीका है। क्या यह काम नहीं करता है?

sshpass -p foo ssh [email protected] " 
cd /www/htdocs/foo/bar 
echo 'Untar and remove installer' 
tar -zxf install.tar.gz 

sed \"s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');\" index.php > tmp && mv tmp index.php 
sed \"s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/\" admin/index.php > tmp && mv tmp admin/index.php 

" 
+0

हाँ! यह सिर्फ सही काम करता है! धन्यवाद! – fedeisas

2

यहां-दस्तावेज़ के बजाय इस्तेमाल किया जा सकता ?:

sshpass -p foo ssh [email protected] <<DATA 
    cd /www/htdocs/foo/bar 
    echo 'Untar and remove installer' 
    tar -zxf install.tar.gz 

    sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');" index.php > tmp && mv tmp index.php 
    sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/" admin/index.php > tmp && mv tmp admin/index.php 
DATA 
+0

भी, '<< "डेटा' का उपयोग करें, यदि आप यहां दस्तावेज़ – sehe

+2

के अंदर परिवर्तनीय विस्तार नहीं चाहते हैं, लेकिन यह एक चेतावनी फेंकता है: छद्म-टर्मिनल आवंटित नहीं किया जाएगा क्योंकि stdin टर्मिनल नहीं है। – fedeisas