मौके पर प्रक्रिया प्रतिस्थापन उम्मीद के मुताबिक काम नहीं करेगा। यहाँ एक उदाहरण है:
इनपुट:
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)। यह ऑन-डिस्क फ़ाइल प्रदान नहीं करता है - यह सिर्फ एक तर्क को प्रतिस्थापित करता है जो एक पाइप फ़ाइल डिस्क्रिप्टर की ओर इशारा करता है।