파일이 존재하지 않는 경우 bash는 파일로 리디렉션됩니다.

파일이 존재하지 않는 경우 bash는 파일로 리디렉션됩니다.

이 bash 코드가 있습니다.

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

그런데 한 줄의 코드에 파일이 없는 경우에만 해당 파일로 리디렉션할 수 있는 방법이 있나요? 이 같은:

   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"

관련 정보