2013-03-22 8 views
5

से बचें मैंने एसएसएच पर रिमोट कमांड पर सिंगल कोट्स से बचने के लिए कोई समाधान पढ़ा है। लेकिन कोई काम फियान।एकल उद्धरण एसएसएच रिमोट कमांड

मैं awk

ssh [email protected] "ps uax|grep bac | grep -v grep | awk \'{ print $2 }\' > /tmp/back.tmp" 
.... 
awk: '{ 
awk:^caracter ''' inválido en la expresión 

काम करते हैं और आदेश पर एक कोटा रखा लेकिन यह भी काम नहीं करते की कोशिश मत करो

ssh [email protected] "ps uax|grep bac | grep -v grep | awk '{ print $2 }' > /tmp/back.tmp" 

कोशिश कर रहा हूँ।

Aprecite मदद

उत्तर

7

अपनी पहली में आप डबल उद्धरण " उपयोग करें ताकि आप $ चरित्र से बचने के लिए की जरूरत है कोशिश:

ssh [email protected] "ps uax|grep bac | grep -v grep | awk '{ print \$2 }' > /tmp/back.tmp" 
                   ▲ 

इसके अलावा, आप उपयोग कर सकते हैं:

ps uax | grep 'ba[c]' | ... 
तो

तो आपको grep -v grep चरण की आवश्यकता नहीं है।

+0

Wauuuuu ... बहुत धन्यवाद ... बहुत से इस सवाल के लिए खर्च ... एक अच्छा दिन – abkrim

8

ssh कमांड होस्टनाम के बाद रिमोट कमांड निष्पादित करने के बाद टाइप किए गए सभी टेक्स्ट का इलाज करता है। गंभीर रूप से आपके प्रश्न का क्या अर्थ है कि आपको पूरे आदेश को उद्धृत करने की आवश्यकता नहीं है जैसा आपने किया है। इसके बजाय, आप केवल कमांड के माध्यम से भेज सकते हैं क्योंकि आप इसे टाइप करेंगे जैसे कि आप रिमोट सिस्टम पर थे।

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

अपनी स्थिति में, आप टाइप करने की आवश्यकता

ssh [email protected] ps uax \| grep ba[c] \| \'{ print \$2 }\' \> /tmp/back.tmp 

या आप उद्धरण एकल उद्धरण उन्हें भागने के बजाय का दोगुना था

ssh [email protected] ps uax \| grep ba[c] \| "'{ print \$2 }'" \> /tmp/back.tmp 
(दोनों ही मामलों में, आप डॉलर चिह्न से बचने के लिए की जरूरत है)

ईमानदारी से यह थोड़ा और जटिल लगता है, लेकिन मुझे यह ज्ञान बहुत ही मूल्यवान लगता है जब रिमोट सिस्टम को कमांड भेजने से निपटने में उद्धरण के अधिक जटिल उपयोग शामिल होते हैं।

संबंधित मुद्दे