निर्देशिका में सीडी के लिए xargs का उपयोग करना


जवाबों:


22

पाइप एक उपप्रकार में xargs चलाता है, और xargs एक उपप्रकार में सीडी चलाता है। एक उपप्रकार में परिवर्तन मूल प्रक्रिया के लिए प्रचारित नहीं किया जाता है।


जो पूर्ण समझ में आता है। यूनिक्स नॉब की मदद करने के लिए धन्यवाद।
इयान लॉटिन्सकी

3
आप बैक-कोट्स का उपयोग करके अपना मनचाहा प्रभाव प्राप्त कर सकते हैं: cd `echo "/some/directory/path" | cut -d\ -f1` (ध्यान दें कि मैंने रिक्त स्थान पर विभाजित करने के लिए to कट ’को जोड़ा और पहला आइटम जिस तरह से xargs करता है) को पकड़ो
Slartibartfast

5
वास्तव में, यह आवश्यकता के कारण xargsनहीं चल सकता cdहै, एक शेल बिल्डिन है और xargsकेवल फ्री-स्टैंडिंग निष्पादनयोग्य चला सकता है। हालाँकि आपने जो कहा है वह सबप्रोसेस के बारे में सच है।
अगली सूचना तक रोक दिया गया।

/ usr / bin / cd निश्चित रूप से एक यूनिक्स मुक्त स्थायी दस्तावेज कमांड है, कम से कम सोलारिस पर।
jlliagre

ऑटो-जनरेट किए गए रास्तों के लिए @Slartibartfast का उपयोग करना: cd `port file libcudd | sed -e 's/\/Portfile//'` (आमतौर पर लंबे लोग जिन्हें आप मैन्युअल रूप से हैंडल नहीं करना चाहते हैं, जैसे कि MacPorts Portfile लोकेशन)।
Ioannis Filippidis

23

आदेश cd एक अंतर्निहित है, क्योंकि वर्तमान निर्देशिका के बारे में जानकारी एक प्रक्रिया से जुड़ी है और केवल शेल-इन अंतर्निहित रनिंग शेल की वर्तमान निर्देशिका को बदल सकती है।

आपके कोड में दो समस्याएं हैं:

  1. xargsनहीं चल सकता cdक्योंकि cdएक अंतर्निहित कमांड है औरxargs केवल निष्पादन योग्य फ़ाइलें चला सकता है।
  2. यहां तक ​​कि अगर आप cdसे बुलाए गए उप-प्रक्रिया में भाग लेते हैं xargs, तो इसका मूल प्रक्रिया पर कोई प्रभाव नहीं पड़ेगा जैसा कि ऊपर बताया गया है।

समाधान एक उप-शेल चलाने के लिए है, इसके अंदर चलता है cdऔर फिर आप नई वर्तमान निर्देशिका में कमांड निष्पादित कर सकते हैं।

ls | xargs -L 1 bash -c 'cd "$0" && pwd && ls'

यह ls | xargs ...इस उदाहरण में करने के लिए समझ में नहीं आता है । इसके लिए मान में पास होना चाहिए $0, जैसेecho "/some/directory/path" | xargs -L 1 bash -c 'cd "$0" && pwd && ls'
बुद्धिमान ३

IMO एक बेहतर समाधान होगा: ls | xargs -L 1 -I @@ bash -c 'cd @@ && pwd && ls'
रोमन एम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.