मैं cp से त्रुटि संदेशों को कैसे दबाऊं?


13

मैं वर्तमान में लिनक्स में त्रुटि कमांड को दबाने के तरीके देख रहा हूं, विशेष रूप से, कमांड cp

मैं करता हूँ:

root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/.
cp: cannot stat `/srv/ftp/201*/wha*/*.jj': No such file or directory

मैं उस त्रुटि संदेश को कैसे दबाऊं जो स्क्रीन पर प्रिंट हो जाता है ? यानी, मैं इस त्रुटि संदेश को अपने मॉनिटर में नहीं देखना चाहता।


1
सिर्फ FYI करें, त्रुटियों की जांच करने का सबसे अच्छा तरीका निकास कोड है। पाइपिंग STDERR / dev / null मानक है और त्रुटियों के किसी भी दृश्य संकेत से छुटकारा दिलाएगा, लेकिन एक शून्य शून्य स्थिति की जांच करने से आपको पता चल जाएगा कि कोई त्रुटि थी या नहीं, कम से कम यह है कि इसे कैसे माना जाता है ...
नाथन मैककॉय

आपका प्रश्न स्पष्ट नहीं है। क्या आप cp से सभी एरर मैसेजेस को छुपाना चाहते हैं? यदि आप वाइल्डकार्ड किसी भी फाइल से मेल नहीं खाते हैं, तो क्या आप कोई त्रुटि संदेश नहीं चाहते हैं? या कुछ और मापदंड?
गाइल्स का SO- बुराई पर रोक '23

जवाबों:


38

में त्रुटि आउटपुट को दबाने के लिए bash, 2>/dev/nullअपने कमांड के अंत में संलग्न करें। यह फ़ाइलहैंडल 2 (STDERR) को रीडायरेक्ट करता है /dev/null। अन्य गोले में समान निर्माण होते हैं, हालांकि विशिष्ट निर्माण थोड़ा भिन्न हो सकते हैं।


आश्चर्य है कि मैंने कभी उस xx के बारे में क्यों नहीं सोचा
अब्दुल

8

त्रुटि संदेश (STDERR) को इनडायरेक्ट करें /dev/null:

root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/. 2>/dev/null

उदाहरण:

$ cp /srv/ftp/201*/wha*/*.jj ~/.  ##Error message gets printed
cp: cannot stat ‘/srv/ftp/201*/wha*/*.jj’: No such file or directory

$ cp /srv/ftp/201*/wha*/*.jj ~/. 2>/dev/null  ##No error message gets printed

5

आपका प्रश्न स्पष्ट नहीं है। सबसे समझदार बात यह है cpकि वाइल्डकार्ड किसी भी फाइल से मेल नहीं खाता है, बल्कि रन करने cpऔर एरर मैसेज को छिपाने के लिए है।

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

#!/bin/bash
shopt -s nullglob
files=(/srv/ftp/201*/wha*/*.jj)
if [[ ${#files[@]} -ne 0 ]]; then
  cp "${files[@]}" ~
fi

सादे श में, परीक्षण करें कि क्या ग्लोब अपरिवर्तित छोड़ दिया गया था, एक गैर-मौजूद फ़ाइल की ओर इशारा करते हुए।

set -- /srv/ftp/201*/wha*/*.jj
if ! [ -e "$1" ] && ! [ -L "$1" ]; then
  cp "$@" ~
fi

यह आवश्यक तकनीक है यदि आप नहीं चाहते कि cp किसी शेल स्क्रिप्ट के भीतर से कोई त्रुटि फेंके - या कम से कम, मैं विशेषज्ञ नहीं हूं, लेकिन यह वह है जो काम करने लगता है।
नेस्बर्ड

0

इसे ~ / .bashrc में जोड़ें:

alias cp='cp 2> /dev/null'

फिर:

source ~/.bashrc

2
यह अनुशंसा की जाती है कि यह स्थायी रूप से मुझे मूर्खतापूर्ण लगता है। ऐसा लगता है कि त्रुटि आउटपुट अवांछित होने पर सिर्फ पाइप stderrकरने के लिए एक बेहतर विचार /dev/nullहै। या की तुलना में एक अलग नाम का उपयोग कर cp
HalosGhost

मैं आपसे सहमत हूं लेकिन यह किसी ऐसे व्यक्ति के लिए एक समाधान है जो अपने मॉनीटर पर कोई त्रुटि संदेश नहीं देखना चाहता है cp
M122

-1

आप या तो उपयोग कर सकते हैं:
1 विकल्प 2>/dev/null:।
2 विकल्प: 2>&1
इसके अलावा आप इसे अपने आदेश के अंत में उपयोग कर सकते हैं यह त्रुटि संदेशों को दबा देगा:

यहाँ उदाहरण-

$cp nofile.txt b.txt > log.txt 2>/dev/null

यहाँ आप त्रुटि संदेश के बारे में कोई जानकारी प्राप्त नहीं कर सकते। Ex2:

$cp nofile.txt b.txt > log.txt 2>&1

यहाँ आप नीचे लॉग फ़ाइल से कुछ जानकारी प्राप्त कर सकते हैं:

$ cat log.txt
cp: cannot stat `nofile.txt': No such file or directory
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.