हाँ, diff <(echo "$foo") <(echo "$bar")
ठीक है।
खोज पात्रों <(
के लिए bash manpage रखकर आप पा सकते हैं कि यह कहा जाता है "प्रक्रिया प्रतिस्थापन।"
आप एक अस्थायी फ़ाइल बनाने की दक्षता के बारे में चिंता है क्योंकि अस्थायी फ़ाइल है की जरूरत नहीं है वास्तव में सिर्फ एक पाइप, डिस्क पर एक फ़ाइल नहीं। इस प्रयास करें:
$ echo <(echo foo)
/dev/fd/63
यह दिखाता है कि अस्थायी फ़ाइल वास्तव में सिर्फ पाइप "फ़ाइल वर्णनकर्ता 63." है हालांकि यह आभासी /dev
फाइल सिस्टम पर दिखाई देता है, डिस्क कभी नहीं छुआ है।
वास्तविक दक्षता समस्या जिसे आपको यहां चिंता करने की आवश्यकता हो सकती है, "प्रक्रिया प्रतिस्थापन" का 'प्रक्रिया' हिस्सा है। बैश echo foo
करने के लिए एक और प्रक्रिया को फोर्क करता है। कुछ प्लेटफार्मों पर, जैसे कि सिग्विन, अक्सर प्रदर्शन करते समय यह बहुत धीमा हो सकता है। हालांकि, अधिकांश आधुनिक प्लेटफार्मों पर, fork
आईएनजी बहुत तेज है। मैं सिर्फ स्क्रिप्ट चलाने से एक बार 1000 प्रक्रिया प्रतिस्थापन कर रही करने की कोशिश की:
echo <(echo foo) <(echo foo) ... 997 repetitions ... <(echo foo)
यह एक Ubuntu आभासी ही लैपटॉप पर चल मशीन में अपने पुराने मैक लैपटॉप पर 0.225s, और 2.3 सेकण्ड लगे। 1000 आमंत्रणों से विभाजित, इससे पता चलता है कि प्रक्रिया प्रतिस्थापन 3 मिलीसेकंड से कम लेता है-कुछ diff
के रनटाइम द्वारा पूरी तरह से बौने कुछ, और शायद आपको चिंता करने की ज़रूरत नहीं है!
इसे समझाने के लिए धन्यवाद! {0..1000} में मेरे लिए मेरे ज़ीऑन [email protected] 'समय पर; echo <(echo foo) करें; किया '0.264 ले लिया। – Martin
ध्यान दें कि यहां तक कि 'echo foo> foo; बिल्ली फू; आरएम फू 'डिस्क को कभी भी छूने की संभावना नहीं है।यदि vfs को भौतिक विभाजन में फ़्लश करने से पहले टेम्पफाइल हटा दिया जाता है, तो प्लेटर पर कभी भी कुछ भी नहीं जाता है। –