शेल कमांड में ">" और ">>" के बीच अंतर क्या है?


45

क्या कोई मुझे शेल कमांड का उपयोग करते समय >और उसके बीच का अंतर समझा सकता है >>?

उदाहरण:

ps -aux > log
ps -aux >> log

ऐसा लगता है कि परिणाम भी उसी तरह है।


2
बैश ऑपरेटरों में से कुछ के बारे में अतिरिक्त जानकारी के लिए, बाश में <<, <<< और <<के बीच अंतर क्या है?
सेर्गेई कोलोडियाज़नी

जवाबों:


48

>एक फ़ाइल को अधिलेखित करने के लिए प्रयोग किया जाता है (" क्लोबर ") और एक फ़ाइल में >>संलग्न करने के लिए उपयोग किया जाता है।

इस प्रकार, जब आप उपयोग करते हैं ps aux > file, तो आउटपुट को ps auxलिखा जाएगा fileऔर यदि कोई फ़ाइल fileपहले से मौजूद है, तो उसकी सामग्री को अधिलेखित कर दिया जाएगा।

और यदि आप उपयोग करते हैं ps aux >> file, के आउटपुट को ps auxलिखा जाएगा fileऔर यदि नाम वाली फ़ाइल fileपहले से मौजूद थी, तो फ़ाइल में अब उसकी पिछली सामग्री और साथ ही ps auxउसकी पुरानी सामग्री के बाद लिखी गई सामग्री भी होगी file


11

यदि आप टर्मिनल में लिखते हैं

ps aux > log

यह ps auxलॉग नाम वाली फ़ाइल के आउटपुट को डाल देगा ।

फिर अगर आप डालते हैं

ps aux >> log

फिर अगला आउटपुट पहले के नीचे जोड़ा जाएगा। यदि आप केवल एक ही डालते हैं तो >यह पिछली फ़ाइल को अधिलेखित कर देगा।


4

हाँ, >>जोड़ देती है, >हमेशा अधिलेखित कर देता है / नष्ट कर देता है पिछली सामग्री।

ps -aux > log

के समान है

rm log 2>/dev/null
ps -aux >> log

विंटेल पर यह समान है .bat, .cmdऔर .ps1स्क्रिप्ट भी; सामान्य विरासत, सामान्य ज्ञान।


3

सबसे महत्वपूर्ण अंतर यह है कि झंडे के >साथ एक फ़ाइल या फ़ाइल जैसी ऑब्जेक्ट खोलती है - 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 (स्टडआउट) पर डुप्लिकेट होता है, और शेल फोर्क्स को जो भी कमांड मिलती है, उसे इनहेरिट किया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.