ファイルが存在しない場合のエラー防止

ファイルが存在しない場合のエラー防止

ファイルの内容をインポートする必要がありますが、ファイルがない場合はエラーが発生しないようにしたいと思います。

これは可能ですか?

cat my-file.txt || false

答え1

あなたにはいくつかの選択肢があります

  1. ファイルが存在しない限り印刷しないでください。ただし、catファイルが存在するが開けない場合は、まだ文句を言うことができます。

    [ -f my-file.txt ] && cat my-file.txt
    
  2. リダイレクトで何らかの理由でファイルを開くことができないときに生成されるエラーメッセージが印刷されないようにしてください。標準エラー「どこでも」

    cat my-file.txt 2>/dev/null
    
  3. $?エラーが発生したことを示すゼロ以外の終了ステータスを設定しないでください。

     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 の違い

関連情報