मैं एक त्वरित रेल ऐप लिख रहा हूं और सोच रहा था कि मैं सफलतापूर्वक निष्पादित आदेश को कैसे सत्यापित कर सकता हूं। मैं जो दो आज्ञाएं चला रहा हूं वे हैं और एसवीएन अपडेट, और एक सीपी से एक निर्देशिका में एक सीपी।रेल में कमांड टर्मिनल कमांड को सत्यापित करने का सबसे अच्छा तरीका क्या है?
उत्तर
यदि आप Kernel.system() विधि का उपयोग करते हैं तो यह कमांड की सफलता का संकेत देने वाला एक बूलियन लौटाएगा।
result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error
वहाँ अलग अलग माणिक प्रणाली का एक अच्छा तुलना here कमांड है।
एसवीएन अपडेट के लिए, अद्यतन से पहले और बाद में संस्करण संख्या की जांच करें।
svn_start_version = IO.popen("svn info").readlines[4]
`svn update`
svn_end_version = IO.popen("svn info").readlines[4]
if svn_end_version > svn_start_version
"success"
end
cp के लिए, आप मूल फ़ाइल की नकल की फाइल करने के लिए बराबर होने पर एक फ़ाइल आकार की जांच कर सकता है।
source_file_size = IO.popen("du file1").readlines
`cp file1 file2`
dest_file_size = IO.popen("du file2").readlines
if dest_file_size == source_file_size
"success"
end
आप बाहरी आदेशों को कैसे निष्पादित कर रहे हैं? रूबी system()
फ़ंक्शन true
या false
पर निर्भर करता है कि आदेश सफल हुआ था या नहीं। इसके अतिरिक्त, $?
में एक त्रुटि स्थिति है।
- बस पंडिताऊ होने के लिए आपको एक
exec
'घ आदेश क्योंकिexec
exec
साथ वर्तमान कार्यक्रम की जगह' मान्य नहीं कर सकता घ आदेश है, तो आदेश सत्यापन के लिए रूबी पर लौटने कभी नहीं होगा। - सीपी के लिए, कम से कम, आप शायद खोल के बजाय फ़ाइलयूट्स मॉड्यूल (रूबी स्टैंडर्ड लाइब्रेरी का हिस्सा) का उपयोग करने के बेहतर होंगे।
- जैसा ऊपर बताया गया है,
$?
पूर्वनिर्धारित चर आपकोsystem()
या बैकटिक ऑपरेटर द्वारा निष्पादित करने के लिए अंतिम आदेश का रिटर्न कोड देगा।
हाँ, जब मैंने पहली बार रूबी प्रोग्रामिंग शुरू की तो वास्तव में निष्पादन ने मुझे फेंक दिया। असल में, इसका इस्तेमाल न करें! –
क्या होगा यदि उपवर्तन भंडार नहीं बदला गया था? आपका कोड विफलता का संकेत देगा। क्या होगा अगर फ़ाइल सामग्री बदल गई हो लेकिन आवंटित ब्लॉक की संख्या नहीं (और कॉपी ऑपरेशन विफल)? आपका कोड सफलता का संकेत देगा। –