CPからのエラーメッセージを抑制するにはどうすればよいですか。


13

現在Linuxでエラーコマンド、特にコマンドを抑制する方法を探していますcp

私がやります:

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

画面に表示れるエラーメッセージを非表示にするにはどうすればよいですか?つまり、このエラーメッセージをモニターに表示したくありません。


1
参考までに、エラーをチェックする最良の方法は終了コードです。/ dev / nullに配管STDERRは標準であり、される方法である少なくともその、エラーのいずれかが視覚的に表示を取り除くだろうが、ゼロ以外のリターン・ステータスをチェックすると、エラーかどうかがあったかどうかを知るようになるはずであることを...
ネイサンマッコイ

あなたの質問は明確ではありません。すべてのエラーメッセージをcpから非表示にしますか?または、ワイルドカードがどのファイルとも一致しない場合にエラーメッセージを表示しませんか?または他のいくつかの基準?
Gilles「SO-邪悪なことをやめなさい」

回答:


38

でのエラー出力を抑制するには、コマンドの最後にbash追加2>/dev/nullします。これにより、ファイルハンドル2(STDERR)がにリダイレクトされます/dev/null。他のシェルにも同様の構成がありますが、特定の構成は少し異なる場合があります。


なぜ私がそのxxを思いつかなかったのか不思議に思う
Abdul

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してエラーメッセージを非表示にするのではなく、まったく実行しないのが最も賢明なことです。

これを行うには、シェルがbashの場合、nullglobオプションがワイルドカードパターンがどのファイルとも一致しない場合に何も展開しないように設定します。次に、パターンが何かに拡張されたかどうかを確認しcp、その場合は呼び出さないでください。

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

単純なshでは、存在しないファイルを指しているグロブが変更されていないかどうかをテストします。

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

これは、cpがシェルスクリプト内からエラーをスローしないようにする場合に必要な手法です。少なくとも、私は専門家ではありませんが、これは機能しているようです。
NessBird

0

これを〜/ .bashrcに追加します。

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

次に:

source ~/.bashrc

2
これを永続的に行うことを推奨するのは、私にはばかげているようです。エラー出力が不要な場合は、単にパイプstderrするほうがはるかに良い考えのよう/dev/nullです。または、とは異なる名前を使用しcpます。
HalosGhost 2015年

私はあなたに同意しますが、これはのモニターにエラーメッセージを表示したくない人のための解決策ですcp
M122 2015年

-1

次のいずれかを使用できます
。1つのオプション:2>/dev/null
2つのオプション:2>&1
コマンドの最後でこれを使用できるほか、エラーメッセージを抑制します。

ここに例-

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

ここでは、エラーメッセージに関する情報を取得できません。例2:

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

ここでは、以下のログファイルから情報を取得できます。

$ cat log.txt
cp: cannot stat `nofile.txt': No such file or directory
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.