मेरे पास एक बैश स्क्रिप्ट है जिसे मैं संलग्न होने के बिना चुप रहना चाहता हूं (क्रॉन से)। अब मैं सशर्त रूप से आउटपुट को एक पंक्ति में/dev/null पर रीडायरेक्ट करने का तरीका ढूंढ रहा था। यह है कि मैं क्या मन में था का एक उदाहरण है, लेकिन मैं कई और अधिक आदेशों स्क्रिप्टबाश में सशर्त पुनर्निर्देशन
#!/bin/bash
# conditional-redirect.sh
if tty -s; then
REDIRECT=
else
REDIRECT=">& /dev/null"
fi
echo "is this visible?" $REDIRECT
दुर्भाग्य में उत्पादन करना होगा, यह काम नहीं करता:
$ ./conditional-redirect.sh
is this visible?
$ echo "" | ./conditional-redirect.sh
is this visible? >& /dev/null
मैं क्या डॉन ' टी क्या करना चाहते हैं के सभी आदेशों नकल है एक साथ-पुनर्निर्देशन या साथ-नो-पुनर्निर्देशन संस्करण:
if tty -s; then
echo "is this visible?"
else
echo "is this visible?" >& /dev/null
fi
संपादित करें:
यह अच्छा होगा अगर समाधान मुझे "शांत" मोड में कुछ आउटपुट करने का एक तरीका प्रदान करेगा, उदाहरण के लिए जब कुछ वास्तव में गलत होता है, तो मैं क्रॉन से नोटिस प्राप्त करना चाहता हूं।
exec &>/dev/null
यह उस बिंदु से सभीstdout
और stderr
/dev/null
को निर्देशित करेंगे:
हां, यह काम करता है ! (या यहां तक कि सरल 'exec &>/dev/null') –
.. लेकिन इसमें नकारात्मकता है कि सभी आउटपुट "शांत" मोड में खो गए हैं; ऐसी परिस्थितियां हो सकती हैं जहां मैं वास्तव में कुछ आउटपुट करना चाहता हूं, यहां तक कि queit मोड में भी; अपरिवर्तित प्रश्न देखें। –
अच्छा बिंदु, @ डैनियल, मुझे दांत में थोड़ी देर लग रही है और पुरानी आदतें मुश्किल से मरती हैं लेकिन मैंने आपके पसंदीदा तरीके से जवाब अपडेट किया है। – paxdiablo