tail -f a.txt
を使用して、a.txt
というファイルの更新を監視しています。
2番目の仮想コンソールでls -a >> a.txt
などを使用してファイルを更新すると、最初の仮想コンソールに変更がリアルタイムで表示されます。
2番目の仮想コンソールでVimを使用してファイルを更新すると、最初の仮想コンソールに変更が表示されません。
私は必ずしもそのウィンドウで更新がトリガーされるとは限りませんが、これがtail -f
コマンドを実行している端末を正確に更新しないのはなぜですか?
vim
を使用してファイルを編集すると、通常はファイルがメモリに読み込まれ、新しいファイルが書き込まれます。そのため、tail
はファイルの古いコピー(tail
(および他のプログラム)がその使用を停止するまでファイルシステムに残ります)で動作しています。
tail
を(ファイルではなく)ファイル名に従うようにすることができます。
tail -F yourfile
大文字F
に注意してください。
私の理解では、通常vim
を使用して編集する場合は、ファイルのコピーを編集しており、変更内容をディスクに書き込むと、ファイルのコピーが移動します。これは元のファイルをunlink
ingし、新しいファイルをmove
ingすることによって発生するため、tail
は元のファイルへの新しい変更を認識しません。