2010-11-03 7 views
10

एक डॉस बैच स्क्रिप्ट में, मैं एक रिमोट (विंडोज़) कंप्यूटर पर एक सिंगल कमांड चला रहा हूं जो प्लगइन का उपयोग कर रहा है। पूर्व में, यह आदेश केवल स्थानीय मशीन पर चलाया गया था, और सफलता निर्धारित करने के लिए रिटर्न कोड पर निर्भर था। क्या इस जानकारी को आसानी से हल करने के माध्यम से प्राप्त करने का कोई तरीका है?लिंक से वापसी कोड प्राप्त करें?

उत्तर

6

plink के साथ यह संभव नहीं है। वर्तमान सहमति यह है कि रिमोट स्क्रिप्ट echo लॉग फ़ाइल में इसका एक्ज़िट कोड है, फिर लॉग फ़ाइल को स्थानीय मशीन में स्थानांतरित करने के लिए pscp का उपयोग करें।

http://fixunix.com/ssh/74235-errorlevel-capturing-plink.html देखें।

+5

आज इसे पढ़ने वाले किसी के लाभ के लिए, शायद यह सच था जब यह लिखा गया था लेकिन यह अब सत्य नहीं है। एसएसएच प्रोटोकॉल का उपयोग करते समय प्लिंक का वर्तमान संस्करण दूरस्थ निकास कोड लौटाएगा। – richb

+0

... काम कर रहे उदाहरण [** यहां **] (http://stackoverflow.com/a/2988139/319204) और [** यहां **] (http://superuser.com/a/130528)। – TheCodeArtist

+3

@richb: बिल्कुल सही नहीं है। एक कनेक्शन नहीं बनाया जा सकता है जब 0.63 सफल (बाहर निकलें स्थिति 0)। :-( –

2
plink 0,66

C:\Code>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" [email protected] exit 42 

C:\Code>echo %ERRORLEVEL% 
42 
इसके अलावा जब कोई कनेक्शन नहीं बनाया जा सकता है के बारे में @ जॉन Wiersba की चिंता के लिए

, इस

C:\CodeMisc>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" [email protected] exit 42 
Unable to open connection: 
Host does not exist 
C:\Code>echo %ERRORLEVEL% 
1 

इसके अलावा echo Y की पाइपिंग ध्यान दें तय किया गया लगता है के साथ

इस ... आपको सर्वर फिंगरप्रिंट को स्वचालित रूप से स्वीकार करने में सक्षम बनाता है (कम से कम कहने के लिए थोड़ा खतरनाक ... लेकिन हमारा लॉगिन सर्वर संतुलित लोड होता है, इसलिए आप हमेशा अलग-अलग फिंगरप्रिंट प्राप्त कर रहे हैं :()

हालांकि @LeonBloy नोट्स के रूप में, अभी भी कुछ कनेक्शन स्थितियां हैं जो शून्य निकास कोड लौटाती हैं। यदि आप अपनी निकास कोड सीमा जानते हैं और आपके पास फ़ाइल के माध्यम से विंडोज़ पर संचार करने का कोई अच्छा तरीका नहीं है। आप या तो बाहर निकलने के लिए +3 कर सकते हैं (यदि आपको पता है कि निकास कोड कभी भी == 253-255 नहीं होगा) या आप थोड़ा सा लागू कर सकते हैं या (मैं exit $(($?|128)) - बैश में सुझाव दूंगा)।

या यदि आपको सटीक निकास कोड की परवाह नहीं है, तो आप सफलता के लिए 2 और विफलता के लिए शून्य वापस कर सकते हैं। इस प्रकार एक गैर-दो निकास कोड विफलता का संकेत देगा। बैश में यह होगा: echo $((($?==0) << 1))। यह अब तक का सबसे मजबूत सामान्य उद्देश्य समाधान होगा, लेकिन आपको यह सुनिश्चित करना चाहिए कि डीबग-क्षमता के लिए आपका निकास कोड लॉग है।

+0

_ .. यह तय किया गया है ... एक बिंदु तक: ''> plink.exe -batch -ssh -i key.ppk [email protected] उपयोगकर्ता नाम "पीआई" का उपयोग करना। सर्वर ने हमारी कुंजी > गूंज से इनकार कर दिया % ERRORLEVEL% '' – leonbloy

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