मैं जावा प्रोग्राम (app.jar) से बाहर निकलने पर फ़ाइल बनाने की कोशिश कर रहा हूं। हालांकि मैं चाहता हूं कि यह फ़ाइल केवल तभी बनाई जाए जब प्रोग्राम सफलतापूर्वक पूरा हो जाए (शून्य स्थिति कोड देता है)।

यहाँ मेरा प्रयास है:

trap "if [ $? -eq 0 ]; then touch /tmp/javaCompleted; fi" EXIT
java app.jar

$? मुझे अंतिम निष्पादित कमांड का स्टेटस कोड देने वाला है, जिसे मैं अपने जावा प्रोग्राम का स्टेटस कोड मानता हूं। हालाँकि मैंने देखा कि यह $? हमेशा 0 पर सेट होता है, स्वतंत्र रूप से java. मुझे वास्तव में संदेह है कि $? वास्तव में ट्रैप कमांड में से एक है...

क्या आप कृपया समझा सकते हैं कि यह क्यों काम नहीं कर रहा है और एक फिक्स का सुझाव दे सकता है?

0
Mit94 3 सितंबर 2021, 17:35
3
trap के चलने से पहले ही $? को दोहरे उद्धरण चिह्नों के अंदर विस्तारित किया जाता है। इसके बजाय सिंगल कोट्स का प्रयोग करें।
 – 
chepner
3 सितंबर 2021, 17:50
1
@ Chepner की टिप्पणी को स्पष्ट करने के लिए, false; trap "if [ $? -eq 0 ]; ... " EXIT trap 'if [ 1 -eq 0 ]; ...' EXIT के बराबर है, और true; trap "if [ $? -eq 0 ]; ..." EXIT trap 'if [ 0 -eq 0 ]; ....' EXIT के बराबर है। $? जिस समय ट्रैप को परिभाषित किया जाता है, उस समय उसके मूल्य में विस्तार किया जा रहा है, न कि जब इसे निष्पादित किया जाता है। सिंगल कोट्स का उपयोग करने से इसे रोका जा सकेगा।
 – 
William Pursell
3 सितंबर 2021, 17:59

1 उत्तर

सबसे बढ़िया उत्तर

trap की कोई आवश्यकता नहीं:

java app.jar && touch /tmp/javaCompleted
2
bashonly 3 सितंबर 2021, 17:50