दिलचस्प पोस्ट
क्या HTML5 वीडियो फ़ुलस्क्रीन बनाने का कोई तरीका है? HTTP-Get और HTTP-POST में अंतर क्या है और सुरक्षा के संदर्भ में HTTP-POST कमजोर क्यों है मैं एक Pylint चेतावनी कैसे अक्षम करूँ? जावास्क्रिप्ट में एक वैरिएबल वैल्यू से ऑब्जेक्ट प्रॉपर्टी कैसे बनाऊं? NSFileManager.defaultManager ()। FileExistsAtPath सही के बजाय झूठी देता है क्या मतलब है? (जावास्क्रिप्ट) सी में स्ट्रिंग के "जीवन-काल" Angular2 में एक टेम्पलेट में एक वैरिएबल कैसे घोषित करें जावास्क्रिप्ट में एक वस्तु विस्तार आईओएस 10 पर फेसबुक आईओएस एसडीके का उपयोग कैसे करें ग्रहण, एंड्रॉइड, स्काला ने आसान बनाया लेकिन अभी भी काम नहीं करता है क्रॉस-ब्राउज़र। के रूप में सहेजें सी # में एक स्ट्रिंग के प्रदर्शन की चौड़ाई की गणना करें? वर्ण वेक्टर को कैसे सॉर्ट करने के लिए जहां तत्वों में आर में अक्षरों और संख्याएं होती हैं? MySQL तालिका से अनन्य अवरोध छोड़ रहा है

मैं वर्तमान से एक अलग कार्य निर्देशिका के साथ प्रोग्राम कैसे चलाऊँ, लिनक्स खोल से?

लिनक्स खोल का उपयोग करना, मैं वर्तमान कार्यशील निर्देशिका से एक अलग कार्य निर्देशिका के साथ एक प्रोग्राम कैसे शुरू करूं?

उदाहरण के लिए, मेरे पास बाइनरी फ़ाइल hello-world.txt है जो वर्तमान निर्देशिका में hello-world.txt फ़ाइल बनाता है। यह फ़ाइल निर्देशिका के अंदर है /a वर्तमान में मैं निर्देशिका में हूं /b मैं अपने प्रोग्राम को चलाना शुरू करना चाहता हूं .. /c/c ../a/helloworld और किसी तीसरे निर्देशिका /c में कहीं hello-world.txt

वेब के समाधान से एकत्रित समाधान "मैं वर्तमान से एक अलग कार्य निर्देशिका के साथ प्रोग्राम कैसे चलाऊँ, लिनक्स खोल से?"

इस कार्यक्रम को इस तरह कॉल करें:

 (cd /c; /a/helloworld) 

कोष्ठकों को एक उप-शेल पैदा करने का कारण बनता है। यह उप-शेल /c उसकी कार्यशील निर्देशिका को बदलता है, फिर /a से helloworld निष्पादित करता /a । कार्यक्रम के बाहर निकल जाने के बाद, उप-शेल समाप्त होता है, आपको मूल शेल के आपके संकेत पर वापस लौटाता है, उस निर्देशिका में।

त्रुटि से निपटने: निर्देशिका को बिना बदलाव किए प्रोग्राम को चलाने से बचने के लिए, उदाहरण के लिए, गलत वर्तनी /c होने पर, helloworld सशर्त का निष्पादन करें:

 (cd /c && /a/helloworld) 

मेमोरी उपयोग को कम करना: नमस्ते दुनिया को कार्यान्वित करते समय subshell कचरा स्मृति होने से बचने के लिए, exec के माध्यम से helloworld कॉल करें:

 (cd /c && exec /a/helloworld) 

[इस जवाब में सुधार करने के लिए सुझाव देने के लिए जोश और जूलियानो के लिए धन्यवाद!]

दाऊद श्मिट के उत्तर के समान है, जोश के सुझाव के मुताबिक, लेकिन शेल प्रोसेस चल रहे हैं:

 (cd /c && exec /a/helloworld) 

इस तरह से अधिक आप समान रूप से शेल पर कमांड चलाते हैं। व्यावहारिक अंतर देखने के लिए, आपको प्रत्येक समाधान से ps ef को दूसरे शेल से चलाने की जरूरत है।

 sh -c 'cd /c && ../a/helloworld' 

मुझे हमेशा लगता है कि यूनिक्स उपकरण को फिल्टर के रूप में लिखा जाना चाहिए, stdin से इनपुट पढ़ा और आउटपुट को stdout पर लिखना। यदि संभव हो तो आप एक विशिष्ट फ़ाइल के बजाय पाठ फ़ाइल की सामग्री को stdout पर लिखने के लिए अपने helloworld बाइनरी को बदल सकते हैं। इस तरह से आप अपनी फ़ाइल को कहीं भी लिखने के लिए खोल का उपयोग कर सकते हैं

$ सीडी ~ / बी

$ ~ / a / helloworld> ~ / c / helloworld.txt

एक विकल्प जो एक सबशेल्ड की आवश्यकता नहीं है और इसमें बाश के लिए बनाया गया है

 (pushd SOME_PATH && run_stuff; popd) 

डेमो:

 $ pwd /home/abhijit $ pushd /tmp # directory changed $ pwd /tmp $ popd $ pwd /home/abhijit 

ऐसा करने का एक तरीका है आवरण खोल स्क्रिप्ट बनाने के लिए

शेल स्क्रिप्ट वर्तमान निर्देशिका को / सी में बदल देगी, फिर / a / helloworld चलाएगा। शेल स्क्रिप्ट निकल जाने के बाद, वर्तमान निर्देशिका वापस / b में वापस आ जाएगी।

यहां एक बैश शेल स्क्रिप्ट उदाहरण है:

 #!/bin/bash cd /c /a/helloworld 

बस अंतिम "&&" में बदलें ";" और यह सीडी वापस कोई फर्क नहीं पड़ता अगर कमांड विफल हो या सफल हो:

 cd SOME_PATH && run_some_command ; cd - 

यदि आप हमेशा इसे / सी पर जाना चाहते हैं, तो जब आप फ़ाइल लिखते हैं तो एक पूर्ण पथ का उपयोग करें

यदि आप इसे अपने कार्यक्रम के अंदर करना चाहते हैं तो मैं ऐसा कुछ करूँगा:

 #include <unistd.h> int main() { if(chdir("/c") < 0 ) { printf("Failed\n"); return -1 ; } // rest of your program... } 

क्यों नहीं इसे सरल रखें

cd SOME_PATH && run_some_command && cd -

अंतिम 'सीडी' कमांड आपको पिछली पीडब्ल्यूडी डायरेक्टरी में वापस ले जाएगी। यह सभी * निक्स सिस्टम पर काम करना चाहिए।

मौजूदा निर्देशिका से कमांड को निष्पादित करने के लिए स्क्रिप्ट निर्देशिका का पूर्ण पथ प्रदान करें

 /root/server/user/home/bin/script.sh