2013-08-01 5 views
7

मेरे पास क्रॉन्टाब में @daily नौकरी है जो सभी रिपो पर git gc चलाती है। मैं नौकरी के लिए एक लॉग फ़ाइल स्थापित करने की कोशिश कर रहा हूं लेकिन I/O पुनर्निर्देशन उन परिणामों का उत्पादन नहीं करता है जिन्हें मैं ढूंढ रहा हूं; मुझे एक खाली फाइल मिलती है।'git gc' आउटपुट को रीडायरेक्ट करने का प्रयास

मैंने सभी सामान्य >, 2>&1 और बिना किसी सफलता के किया है।

किसी ने मुझे बताया कि git gc अपने उत्पादन प्रक्रियाओं के लिए ncurses का उपयोग करता है जो सीधे कंसोल पर आउटपुट फेंकता है, इस प्रकार stdout/stderr को छोड़कर (अगर मैं यहां गलत हूं तो मुझे सही करें)।

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

उत्तर

6

आप इस कोशिश कर सकते हैं:

script -q -c 'git gc' > log

या यह (अधिक पठनीय उत्पादन के साथ):

script -q -c 'git gc' | sed 's/\r.*//g' > log

12

यह ncurses (प्रोग्राम हैं जो ncurses का उपयोग आम तौर पर अपने हाथ में लेने का उपयोग नहीं करता पूरी स्क्रीन)।

रनिंग

strace -p -o git-gc.strace git gc 

पता चलता है कि प्रगति संदेशों stderr (फ़ाइल वर्णनकर्ता 2) के लिए लिखा जाता है - लेकिन वे निष्क्रिय कर रहे हैं अगर stderr एक tty नहीं हैं। तो अगर आप

git gc 2>some_file 

चलाने तो some_file, खाली हो क्योंकि git gc सब पर प्रगति संदेशों का उत्पादन नहीं करता होगा।

git gc --quiet 

मैं कोड नहीं मिला है कि पर quietबदल जाता है अगर stderr है:

स्रोत कोड (builtin/gc.c) को देखते हुए, वहाँ एक quiet विकल्प है कि --quiet कमांड लाइन विकल्प द्वारा निर्धारित है एक tty नहीं है, लेकिन मैं इसी तरह के कोड को कहीं और Git स्रोतों में इस तरह के रूप में देखते हैं,:

quiet = !isatty(2); 

वहाँ +०१२३८२६९५१ चालू करने की कोई कमांड लाइन विकल्प हैविकल्प से बाहर।

जिसका अर्थ है कि यदि आप git gc के प्रगति आउटपुट को कैप्चर करना चाहते हैं, तो आपको इसे मनाने की आवश्यकता होगी कि यह एक tty के लिए निर्देशित stderr के साथ चल रहा है।

some guy's answer ऐसा करने का एक तरीका प्रदान करता है।

लेकिन जब कोड टर्मिनल पर लिख रहा है तो प्रगति संदेशों को उत्पन्न करने के अपने तरीके से बाहर निकलता है, तो आप इस बात पर विचार कर सकते हैं कि आपको वास्तव में उन संदेशों को कैप्चर करने की आवश्यकता है या नहीं। वे सहेजे जाने के लिए डिज़ाइन नहीं किए गए हैं, और वे सभी उपयोगी नहीं हो सकते हैं।

(लिखे जाने की और, अगर आप पर्याप्त रूप से प्रेरित कर रहे हैं, उन्हें प्रगति संदेशों के लिए मजबूर करने हैक) आप Git स्रोत स्वयं की जांच करना चाहते हैं:

git clone git://git.kernel.org/pub/scm/git/git.git 
संबंधित मुद्दे