私は現在、Linuxでエラーコマンド、特にコマンドcp
を抑制する方法を探しています。
私がやります:
root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/.
cp: cannot stat `/srv/ftp/201*/wha*/*.jj': No such file or directory
画面に印刷と表示されるエラーメッセージを非表示にするにはどうすればよいですか?つまり、このエラーメッセージをモニターに表示したくありません。
bash
のエラー出力を抑制するには、コマンドの最後に2>/dev/null
を追加します。これにより、ファイルハンドル2(STDERR)が/dev/null
にリダイレクトされます。他のシェルにも同様の構成がありますが、特定の構成は少し異なる場合があります。
エラーメッセージ(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
あなたの質問は明確ではありません。ワイルドカードがどのファイルとも一致しない場合は、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
これを〜/ .bashrcに追加します。
alias cp='cp 2> /dev/null'
次に:
source ~/.bashrc