मौके पर प्रक्रिया प्रतिस्थापन उम्मीद के मुताबिक काम नहीं करेगा। यहाँ एक उदाहरण है:
इनपुट:
gcc <(echo 'int main(){return 0;}')
आउटपुट:
/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
इनपुट:
लेकिन जब यह एक अलग कमांड के साथ प्रयोग किया जाता है, तो यह अपेक्षित है:
grep main <(echo 'int main(){return 0;}')
आउटपुट:
int main(){return 0;}
मैंने अन्य आदेशों के साथ समान विफलताओं पर ध्यान दिया है (यानी प्रक्रिया प्रतिस्थापन से फ़ाइल की अपेक्षा करने वाला कमांड उपयोग /dev/fd/63
या समान नहीं कर सकता है )। इस विफलता के साथ gcc
अभी हाल ही में है। क्या कुछ सामान्य नियम हैं जो मुझे यह निर्धारित करने के लिए पता होना चाहिए कि प्रक्रिया प्रतिस्थापन इस तरह से विफल हो जाएगा और इसका उपयोग नहीं किया जाना चाहिए?
मैं Ubuntu 12.04 पर इस BASH संस्करण का उपयोग कर रहा हूं (मैंने इसे आर्क और डेबियन में भी देखा है):
GNU बैश, संस्करण 4.3.11 (1) -release (i686-pc-linux-gnu)
gcc -xc <(echo 'int main(){return 0;}')
(जो C
स्पष्ट रूप से भाषा सेट करता है )।
illegal seek
उत्तर की तरह दिखता है - जो|pipe
किbash
निष्पादित कार्यक्रम को इंगित करता है वह एक खोजने योग्य फ़ाइल नहीं है। शायद अगर आपecho data | command /dev/fd/0
एक कार्यक्रम में सफलतापूर्वक नहीं कर सकते हैं तो आपके पास समान भाग्य w / होगा<(cmd)
। यह ऑन-डिस्क फ़ाइल प्रदान नहीं करता है - यह सिर्फ एक तर्क को प्रतिस्थापित करता है जो एक पाइप फ़ाइल डिस्क्रिप्टर की ओर इशारा करता है।