저는 Node.js의 특정 구성을 재정의하기 위해 작은 bash 스크립트를 작성하려고 했습니다. 저는 zsh를 사용하고 있으므로 기존 파일의 출력을 리디렉션하면 경고가 표시됩니다(이봐). 제안된 답변을 시도해 보았지만 결과는 매우 특이했습니다. 어쩌면 내가 여기서 뭔가 잘못하고 있는지 궁금합니다.
echo 'module.exports = { "foo": 1 }' > foo.js
node -e '
const foo = require("./foo")
foo.bar = 1
console.log(`module.exports = ${JSON.stringify(foo)}`)
'
# output is: module.exports = {"foo":1,"bar":1}
node -e '
const foo = require("./foo")
foo.bar = 1
console.log(`module.exports = ${JSON.stringify(foo)}`)
' > bar.js
cat bar.js
# output is: module.exports = {"foo":1,"bar":1}
node -e '
const foo = require("./foo")
foo.bar = 1
console.log(`module.exports = ${JSON.stringify(foo)}`)
' >| foo.js
# output is: module.exports = {"bar":1}
내 인상은 >|
zsh의 "파일 덮어쓰기" 경고를 우회했지만 "예상과 다른" 반환 값을 계산했다는 것입니다.
실제: module.exports = {"bar":1}
예상:module.exports = {"foo":1,"bar":1}
바이트는 어디로 갔습니까 "foo:1"
? 누군가 나에게 무슨 일이 일어나고 있는지 설명해 줄 수 있습니까?
답변1
명령의 출력이 사용되거나 파일로 >
리디렉션되면 파일이 먼저 잘립니다(비어집니다).>|
그 다음에명령이 실행됩니다.
이전 예제에서 Node.js 코드를 실행하면 foo.js
리디렉션으로 인해 파일이 비어 있습니다. 이것이 이 파일의 원본 데이터가 출력에 표시되지 않는 이유입니다.