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




command exit (4)

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

exit_code = system("ruby test.rb")

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

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

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

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

ऐसा करने का एक तरीका उनको चेन करना है and && :

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

पहली कॉल विफल होने पर दूसरी कॉल नहीं चली जाएगी।

आप उन्हें कुछ प्रवाह नियंत्रण देने के लिए if () में लपेट सकते हैं:

if (
  system("VBoxManage createvm --name test1") && 
  system("ruby test.rb")
) 
  # do something
else
  # do something with $?
end

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

इसलिये

system( "foo" ) or exit

या

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

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


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




exit-code