linux हरण मैं लिनक्स शैल से वर्तमान में एक अलग कार्यशील निर्देशिका के साथ प्रोग्राम कैसे चला सकता हूं?




रूपांतरित चट्टान के उदाहरण (9)

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

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


ऐसा करने का एक तरीका एक रैपर शैल स्क्रिप्ट बनाना है।

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

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

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

बस अंतिम "&&" को ";" में बदलें और यदि आदेश विफल रहता है या सफल होता है तो यह सीडी वापस आ जाएगा:

cd SOME_PATH && run_some_command ; cd -

इसे आसान क्यों न रखें

cd SOME_PATH && run_some_command && cd -

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


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

डेविड श्मिट के जवाब के समान, जोश के सुझाव के साथ, लेकिन एक खोल प्रक्रिया चलाना नहीं छोड़ता है:

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

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


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


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

(pushd SOME_PATH && run_stuff; popd)

डेमो:

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

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

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

  // rest of your program...

}

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

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




environment