2011-12-08 8 views
11

पर कमांड के आउटपुट को फोकलने और पुनर्निर्देशित करने के लिए मैं अक्सर एक खोल (मेरे केस बैश में) आदेशों से निष्पादित करता हूं जिसे मैं तुरंत फोर्क करना चाहता हूं और जिसका आउटपुट मैं अनदेखा करना चाहता हूं। तो वास्तव में अक्सर है कि मैं बनाया एक स्क्रिप्ट (silent) यह करने के लिए:बस/dev/null

#!/bin/bash 
[email protected] &> /dev/null & 

मैं तो चला सकते हैं, जैसे कि

silent inkscape myfile.svg 

और मेरे टर्मिनल प्रक्रिया मैं सिर्फ काँटेदार की डिबग आउटपुट से प्रदूषित नहीं किया जाएगा।

मैं दो प्रश्न हैं:

  1. वहाँ एक "आधिकारिक" ऐसा करने का तरीका है ?, अर्थात कुछ कम लेकिन &> /dev/null & के बराबर?

  2. यदि नहीं, तो क्या कोई तरीका है कि मैं अपने silent कमांड के बाद टैब-समापन कार्य कर सकता हूं जैसे कि यह वहां नहीं था? एक उदाहरण देने के लिए, मैंने silent inksc टाइप करने के बाद, जब मैं [tab] दबाता हूं तो मैं अपने आदेश को silent inkscape पर स्वतः पूर्ण करने के लिए बाश चाहता हूं।

+0

आपने लिखा 'जैसे कि यह वहां नहीं था'। क्षमा करें 'यह' क्या है? शायद आप स्पष्टीकरण के लिए अपनी पोस्ट संपादित कर सकते हैं। सौभाग्य। – shellter

+0

इसका मतलब है कि बैश को सामान्य आदेश के रूप में 'चुप' के तर्कों का इलाज करना है, उस आदेश के लिए सामान्य टैब पूर्णता उपलब्ध है। तो 'मूक गिट पुस [टीएबी]' 'मूक गिट पुश' को पूरा करेगा। –

+1

मैंने दूसरे प्रश्न को स्पष्ट किया, पूछने के लिए धन्यवाद। गिट उदाहरण शायद बेहतर है, क्योंकि इससे पता चलता है कि मैं उस मामले में गिट पूर्णता प्रोफाइल का उपयोग करने के लिए बैश करना चाहता हूं। – Philippe

उत्तर

4

एक तरफ: शायद exec "[email protected]" &> /dev/null & अपने silent स्क्रिप्ट में उप-खोल को त्यागने के कारण, और "[email protected]" के आसपास उद्धरण स्थान को रास्ते में आने से रोक देगा।

# 2: complete -F _command silent के लिए कुछ ऐसा करना चाहिए जो आप चाहते हैं। (मुझे लगता है कि स्क्रिप्ट launch की मेरी संस्करण फोन और मेरे .bash_profile में complete -F launch है)

0

शायद यदि आप टैब कुंजी को 'रिबाइंड' कर सकते हैं? एंटर कुंजी पर एक example एंटर कुंजी के साथ Stackoverflow दिखाया गया है। क्या यह सही विचार है?

1

यहाँ एक छोटे से स्क्रिप्ट मैं उदा से इंटरैक्टिव (और बातूनी) एक्स क्षुधा लॉन्च करने के लिए उपयोग करें एक xterm

#!/bin/bash 
exe="$1" 
shift 
"$exe" "[email protected]" 2>/tmp/$$."$exe".err 1>&2 & disown $! 

कोई उत्पादन, अगर टर्मिनल बाहर निकलता है मर नहीं होगा, लेकिन इस मामले में कुछ गलत हो जाता है कि वहाँ के सारे उत्पादन/tmp

का एक लॉग है आप लॉग नहीं करना चाहते हैं तो बस का उपयोग इसके बजाय/dev/null।

यदि आप स्क्रिप्ट-एलर्जी हैं तो भी एक फ़ंक्शन से काम करेंगे।

2

ऐसा लगता है कि नोहुप आप जितना चाहें उतना कम या कम करता है। टैब-पूर्णता समस्या यह है कि बैश सोचता है कि आप स्क्रिप्ट के लिए एक तर्क के रूप में फ़ाइल नाम को पूरा करने का प्रयास कर रहे हैं, जबकि इसके पूर्णता नियमों को पता है कि नोहुप अपना पहला तर्क के रूप में कमांड लेता है।

नोहूप stout और stderr को nohup.out पर रीडायरेक्ट करता है और यदि आपका खोल निकलता है तो कमांड भी छोड़ देगा।

+0

मुझे लगता है कि 'नोहुप' लगभग वही है जो मैं चाहता हूं; जहां तक ​​मैं इसकी कार्यप्रणाली को समझता हूं, यह स्वचालित रूप से प्रक्रिया को फोर्क नहीं करता है। – Philippe

+0

नहीं, लेकिन यदि आप पृष्ठभूमि में प्रक्रिया को चलाने की आवश्यकता है तो आप "नोहप कमांड" का उपयोग कर सकते हैं। – nelz