शेल कमांड के आउटपुट को छुपाना आमतौर पर stderr और stdout को पुनर्निर्देशित करना शामिल है। क्या कोई अंतर्निहित सुविधा या कमांड है जो डिफ़ॉल्ट रूप से आउटपुट को छुपाता है लेकिन त्रुटि पर सभी संचित आउटपुट को डंप करता है? मैं इसे रिमोट ssh
कमांड के लिए एक आवरण के रूप में चलाना चाहूंगा । अब मैं उन्हें पुनर्निर्देशन का उपयोग कर रहा हूं, लेकिन मुझे कोई सुराग नहीं मिला है कि उन्हें क्या असफल बनाया गया है, और वे अभी बहुत क्रियात्मक हैं।
EDIT: अंत में मैंने @Belmin के उत्तर के आधार पर निम्नलिखित टेम्पलेट बनाया, जिसे मैंने स्क्रिप्ट से पिछली सभी कमांड को संचित करने के लिए थोड़ा बदल दिया, वर्तमान प्रक्रिया पहचानकर्ता का उपयोग करें, स्वचालित रूप से लॉग को हटा दें, और विफलता लाल त्रुटि जोड़ें संदेश जब कुछ गलत हो जाता है। इस टेम्पलेट में प्रारंभिक silent
रैपर सफल होंगे, फिर तीसरी कमांड को विफल कर देंगे क्योंकि निर्देशिका पहले से मौजूद है:
#!/bin/sh
set -e
SILENT_LOG=/tmp/silent_log_$$.txt
trap "/bin/rm -f $SILENT_LOG" EXIT
function report_and_exit {
cat "${SILENT_LOG}";
echo "\033[91mError running command.\033[39m"
exit 1;
}
function silent {
$* 2>>"${SILENT_LOG}" >> "${SILENT_LOG}" || report_and_exit;
}
silent mkdir -v pepe
silent mkdir -v pepe2
silent mkdir -v pepe
silent mkdir -v pepe2
2>&1
, जैसे कुछ:$* >>"${SILENT_LOG}" 2>&1" || report_and_exit