ファイルが存在しない場合、bashはファイルにリダイレクトされます。

ファイルが存在しない場合、bashはファイルにリダイレクトされます。

このbashコードがあります。

  if [[ ! -f "$HOME/.oresoftware/package.json" ]]; then
       cat "node_modules/@oresoftware/package.json" > "$HOME/.oresoftware/package.json";
    fi

しかし、1行のコードにファイルがない場合にのみそのファイルにリダイレクトする方法はありますか?このような:

   cat "node_modules/@oresoftware/package.json" ?> "$HOME/.oresoftware/package.json";

楽しかったようです。

答え1

このnoclobberオプションを設定すると、bashは既存のファイルの上書きを拒否します。

$ set -C    # or set -o noclobber
$ touch foo
$ cat bar > foo
bash: foo: cannot overwrite existing file

だから:

set -C
cat "node_modules/@oresoftware/package.json" > "$HOME/.oresoftware/package.json"

終了状態を無視するには、コマンド!の前に追加するだけです。cat

set -C; ! cat "node_modules/@oresoftware/package.json" > "$HOME/.oresoftware/package.json"

関連情報