cat package.yaml > package.yaml
上記の内容は切り捨てられ、package.yaml
ファイルが空になります。つまり、cat
空の出力になります。
ファイルの切り捨てを防ぐ方法は?一時ファイルを使用する以外の方法はありませんか?たぶん変数ですか?
ベストアンサー1
ファイルの内部編集を許可するすべてのユーティリティは、内部的に結果を一時ファイルに書き込み、操作が完了した後に元のファイルをその一時ファイルに置き換える方法でこれを行います。
文書できる内部変更は可能ですが、既存のデータを上書きしたりファイルの長さを延長したりするだけです。これは、dd
次のユーティリティを使用して実行できます。
$ cat file.txt
hello world
abc abc 123 123
$ cat insert.txt
hello!
$ dd if=insert.txt of=file.txt bs=1 seek=6 conv=notrunc
7+0 records in
7+0 records out
7 bytes transferred in 0.000 secs (30918 bytes/sec)
$ cat file.txt
hello hello!
bc abc 123 123
ここでは、insert.txt
まずファイル内の6バイトの前を見て(空白をスキップ)、内容を変更して内容を挿入します。書き込み操作の終わりに出力ファイルが切り捨てられるのを防ぎます。file.txt
hello
conv=notrunc
省略すると、if=insert.txt
キーボードから任意のテキストを挿入できます。ここで「挿入」は実際には間違った用語です。 「上書き」は何が起こっているのかをよりよく説明するかもしれません(最後に改行文字が2行目の最初の文字を上書きすることを参照してくださいinsert.txt
)。
しかし、このようにファイルを編集したくありません。