私のスクリプトはtmpファイルを使用してデータを書き込んで削除します。書き込みとsed
削除にリダイレクトを使用します。
時にはファイルが存在し、空であることを確認したいが、コードは失敗します(ファイルは存在しますがデータはありません)。
[[ -s /tmp/tmp_file ]] && echo "not empty" || echo "empty"
not empty
ファイルサイズを確認すると、ファイルにデータがないのに1バイトで表示されます。
geditでファイルを開いて保存すると、サイズは0バイトで表示されます。
なぜこれが起こるのですか?
コンテンツを削除した後に余分なバイトが残っていないことを確認するには?
ファイルが「空」(1バイト)の場合は、ls -ld
次の出力を追加します。od
ls -ld tmp_file
-rwxr-xr-x 1 root root 1 dic 18 15:43 tmp_file
od tmp_file
0000000 000012
0000001
1バイトサイズの画像を表示します。
geditで開かれたファイルイメージ:
答え1
echo
私はあなたが改行を追加するファイルへの書き込みを使用しており、削除を使用するときにsed
削除するときに改行と一致しないと推測します。
ここにはいくつかのオプションがあります。
1:末尾の改行なしで作成するには、printf
または(サポートされている場合)を使用します。 2: sed を使用して末尾の改行文字を一致させて削除します。 3: 適切な時間にファイルを消去するスティーブの方法。echo -n
答え2
\n のみを含む 1 バイトのファイルです。
>/tmp/foo
0にリセットするために使用されます。
$ ls -l /tmp/foo
-rw-rw-r--. 1 steve steve 1 Dec 18 12:50 /tmp/foo
$ od -c /tmp/foo
0000000 \n
0000001
$ >/tmp/foo
$ ls -l /tmp/foo
-rw-rw-r--. 1 steve steve 0 Dec 18 12:51 /tmp/foo
$