क्या कोई मुझे शेल कमांड का उपयोग करते समय >और उसके बीच का अंतर समझा सकता है >>?
उदाहरण:
ps -aux > log
ps -aux >> log
ऐसा लगता है कि परिणाम भी उसी तरह है।
क्या कोई मुझे शेल कमांड का उपयोग करते समय >और उसके बीच का अंतर समझा सकता है >>?
उदाहरण:
ps -aux > log
ps -aux >> log
ऐसा लगता है कि परिणाम भी उसी तरह है।
जवाबों:
>एक फ़ाइल को अधिलेखित करने के लिए प्रयोग किया जाता है (" क्लोबर ") और एक फ़ाइल में >>संलग्न करने के लिए उपयोग किया जाता है।
इस प्रकार, जब आप उपयोग करते हैं ps aux > file, तो आउटपुट को ps auxलिखा जाएगा fileऔर यदि कोई फ़ाइल fileपहले से मौजूद है, तो उसकी सामग्री को अधिलेखित कर दिया जाएगा।
और यदि आप उपयोग करते हैं ps aux >> file, के आउटपुट को ps auxलिखा जाएगा fileऔर यदि नाम वाली फ़ाइल fileपहले से मौजूद थी, तो फ़ाइल में अब उसकी पिछली सामग्री और साथ ही ps auxउसकी पुरानी सामग्री के बाद लिखी गई सामग्री भी होगी file।
सबसे महत्वपूर्ण अंतर यह है कि झंडे के >साथ एक फ़ाइल या फ़ाइल जैसी ऑब्जेक्ट खोलती है - O_WRONLY|O_CREAT|O_TRUNCयदि मौजूद है तो फ़ाइल बनाई जाएगी या काट दी जाएगी, जबकि झंडे के >>साथ फ़ाइल खोलता है O_WRONLY|O_CREAT|O_APPEND- यदि मौजूद है तो फ़ाइल बनाई जाएगी या जोड़ा जाएगा। यह स्पष्ट है अगर आप सिस्टम कॉल का पता लगाते हैं, उदाहरण के लिए
$ strace -e open,dup2 bash -c 'true >> /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 1) = 1
dup2(10, 1) = 1
और साथ
$ strace -e open,dup2 bash -c 'true > /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1) = 1
dup2(10, 1) = 1
+++ exited with 0 +++
ध्यान दें कि दोनों ही मामलों में ओपन फाइल का फाइल डिस्क्रिप्टर कमांड के फाइल डिस्क्रिप्टर 1 (स्टडआउट) पर डुप्लिकेट होता है, और शेल फोर्क्स को जो भी कमांड मिलती है, उसे इनहेरिट किया जाएगा।