![파일이 존재하지 않는 경우 bash는 파일로 리디렉션됩니다.](https://linux55.com/image/133316/%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EC%A1%B4%EC%9E%AC%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EA%B2%BD%EC%9A%B0%20bash%EB%8A%94%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%EB%90%A9%EB%8B%88%EB%8B%A4..png)
이 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"