ファイルの内容をインポートする必要がありますが、ファイルがない場合はエラーが発生しないようにしたいと思います。
これは可能ですか?
cat my-file.txt || false
答え1
あなたにはいくつかの選択肢があります
ファイルが存在しない限り印刷しないでください。ただし、
cat
ファイルが存在するが開けない場合は、まだ文句を言うことができます。[ -f my-file.txt ] && cat my-file.txt
リダイレクトで何らかの理由でファイルを開くことができないときに生成されるエラーメッセージが印刷されないようにしてください。標準エラー「どこでも」
cat my-file.txt 2>/dev/null
$?
エラーが発生したことを示すゼロ以外の終了ステータスを設定しないでください。cat my-file.txt || true
最初の2つのケースでは、次のコマンドは成功を確認するためのヘルステストですcat
。例えば
cat my-file.txt 2>/dev/null
[ $? -ne 0 ] && echo 'There was an error accessing my-file.txt'
また、次のように読みやすい条件文でラップできます。
if ! cat my-file.txt 2>/dev/null
then
echo 'There was an error accessing my-file.txt'
fi
if
最後のケースでは、終了状態を正常に隠し、複合cat
コマンドの終了状態を次のようにするため、ステートメントでコマンドを使用する必要はありません。いつも0です(ある意味、「エラーを防ぐ」)。
答え2
標準エラーオフ2>&-
:
cat my-file.txt 2>&- || false
上下に:2>&-, 2>/dev/null, |&, &>/dev/null および >/dev/null 2>&1 の違い