私は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
リダイレクトのためファイルが空になります。これが、このファイルの元のデータが出力に表示されない理由です。