$ tail -f testfile
コマンドは、指定されたファイルの最新のエントリをリアルタイムで表示することになっていますか?しかし、それは起こっていません。私がやろうとしていることが間違っている場合は、私を訂正してください...
新しいファイル「aaa」を作成し、テキスト行を追加して閉じました。次に、次のコマンドを発行します(1行目):
$ tail -f aaa
xxx
xxa
axx
最後の3行はファイルaaaの内容です。コマンドがまだ実行されているので(-f
)、GUIを介してファイルaaaを開き、数行を手動で追加し始めました。しかし、ターミナルはファイルに追加された新しい行を表示しません。
ここで何が問題になっていますか? tail -f
コマンドは、システムによってのみ書き込まれた場合にのみ新しいエントリを表示しますか? (ログファイルなど)
tail(1)
から man page :
With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail’ed file is renamed, tail will continue to track its end. This default behavior is not desirable when you really want to track the actual name of the file, not the file descrip- tor (e.g., log rotation). Use --follow=name in that case. That causes tail to track the named file in a way that accommodates renaming, removal and creation.
テキストエディタが元のファイルの名前を変更または削除して、新しいファイルを同じファイル名で保存しています。使用する -F
代わりに。
エディタには、ファイル用の独自のバッファがあります。エディターでテキストを変更しても、ファイル自体には何も書き込まれません。
変更を保存すると、エディターが古いファイルを削除して新しいファイルを作成する可能性があります。 tail -f
は削除されたファイルに接続されたままなので、新しいものは表示されません。
tail
デフォルトでは、1秒ごとに「更新」します。リアルタイムではありません。
これで試してください(bash4が必要です):
touch ~/output.txt
とtail -f ~/output.txt
を実行します。for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
を実行します