web-dev-qa-db-ja.com

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

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

私がやります:

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

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

13
andy_ttse

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

38
John

エラーメッセージ(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
8
heemayl

あなたの質問は明確ではありません。ワイルドカードがどのファイルとも一致しない場合は、cpを実行してエラーメッセージを非表示にするのではなく、cpをまったく実行しないことをお勧めします。

これを行うには、シェルがbashの場合、 nullglob option を設定して、ワイルドカードパターンがどのファイルとも一致しない場合に何も展開しないようにします。次に、パターンが何かに拡張されたかどうかを確認し、その場合は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

次のいずれかを使用できます。
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
0
jeevan kishore

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

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

次に:

source ~/.bashrc
0
M122