私が再帰すると仮定しましょう。ls
$ ls -R
ルートディレクトリにあります。
このような文字をたくさん受けます -
ls: cannot open directory ./var/lib/sendmail: Permission denied
ls: cannot open directory ./var/lib/sudo: Permission denied
...
cannot open directory
上記のメッセージが表示されないようにする方法はありますか?
答え1
これはエラーメッセージなので、stdoutではなくstderrに送信されます。解決策はstderrをリダイレクトすることです。
ls -R 2>/dev/null
説明する:
すべてのコマンドには3つの標準ファイル記述子があります:標準入力(0)(通常コマンドが入力される端末)、標準出力(1)(通常コマンドが出力を印刷する端末)、標準エラー(2)(byデフォルトは標準出力と同じです)。
すべてではありませんが、ほとんどのプログラム/ツールは標準エラーファイル記述子に警告とエラーを出力します。これで、ファイルディスクリプタが修復された場合、それほど役に立ちません。これがシェルが次を提供する理由です。リダイレクト:標準ファイル記述子を目的のファイルにリダイレクトできます。
標準入力リダイレクト(キーボードではなくファイルから入力を受け取る):
interactive_program 0< file_with_answers
ご覧のとおり、標準入力にいわゆる「応答ファイル」を提供することで、多くの質問をする簡単なプログラムを自動化するのに役立ちます。
これは次のように短縮できます。
interactive_program < file_with_answers
<
リダイレクトを明確にするので(~から文書到着プログラム)
1>...
同様に、stdoutは、または(既存のファイルをトリミングせずに追加)を介して>...
リダイレクトできます。>>...
標準エラーリダイレクトを使用するには、次のようにファイル記述子を明示的に指定する必要があります。2>...
したがって、上記の作業はすべてのエラーを特別なファイルに送信することです。/dev/null
これは少しブラックホールに似ています。
関連読書以下の説明では、MattDMoが提供するリダイレクトについて説明します。