ruby रूबी सिस्टम कमांड जांच निकास कोड




command exit (4)

यदि आदेश में कोई गैर-शून्य निकास कोड है, या nil तो system false रिटर्न देता है।

इसलिये

system( "foo" ) or exit

या

system( "foo" ) or raise "Something went wrong with foo"

काम करना चाहिए, और उचित संक्षेप में हैं।

मेरे पास रूबी में सिस्टम कॉल का एक गुच्छा है जैसे कि निम्न और मैं अपने निकास कोड एक साथ जांचना चाहता हूं ताकि अगर मेरी कमांड विफल हो जाए तो मेरी स्क्रिप्ट निकल जाए।

system("VBoxManage createvm --name test1")
system("ruby test.rb")

मुझे कुछ चाहिए

system("VBoxManage createvm --name test1", 0) <- जहां दूसरा पैरामीटर निकास कोड की जांच करता है और पुष्टि करता है कि वह सिस्टम कॉल सफल था, और यदि नहीं, तो यह एक त्रुटि उठाएगा या उस तरह का कुछ करेगा।

क्या यह बिल्कुल संभव है?

मैंने इस के साथ कुछ करने की कोशिश की है और यह भी काम नहीं करता है।

system("ruby test.rb")
system("echo $?")

या

`ruby test.rb`
exit_code = `echo $?`
if exit_code != 0
  raise 'Exit code is not zero'
end

documentation :

अगर सिस्टम शून्य निकास स्थिति देता है, तो शून्य शून्य निकास स्थिति के लिए false देता true तो सिस्टम true लौटाता true । आदेश निष्पादन विफल होने पर nil वापस आता है।

system("unknown command")     #=> nil
system("echo foo")            #=> true
system("echo foo | grep bar") #=> false

और भी

$? में एक त्रुटि स्थिति उपलब्ध है $?

system("VBoxManage createvm --invalid-option")

$?             #=> #<Process::Status: pid 9926 exit 2>
$?.exitstatus  #=> 2

मेरे लिए, मैंने खोल आदेशों को कॉल करने के लिए `` का उपयोग करना पसंद किया और $ जांचें? प्रक्रिया की स्थिति प्राप्त करने के लिए। $? एक प्रक्रिया स्थिति वस्तु है, आप इस ऑब्जेक्ट से कमांड की प्रक्रिया जानकारी प्राप्त कर सकते हैं, जिसमें निम्न शामिल हैं: स्थिति कोड, निष्पादन स्थिति, पिड इत्यादि।

$ के कुछ उपयोगी तरीके? वस्तु:

   $?.exitstatus => return error code    
   $?.success? => return true if error code is 0, otherwise false
   $?.pid => created process pid

आप अपने system कॉल के परिणाम कैप्चर नहीं कर रहे हैं, जहां परिणाम कोड वापस किया गया है:

exit_code = system("ruby test.rb")

प्रत्येक system कॉल या समकक्ष को याद रखें, जिसमें बैकटिक-विधि शामिल है, एक नया खोल बनाता है, इसलिए पिछले शैल के पर्यावरण के परिणाम को कैप्चर करना संभव नहीं है। इस मामले में exit_code true अगर सब कुछ काम करता है, अन्यथा nil

popen3 कमांड अधिक निम्न स्तर का विस्तार प्रदान करता है।





exit-code