tech.guitarrapc.cóm

Technical updates

PowerShellでtail -fを再現する

PowerShellで毎日いじられてます。 悔しいことが多いけど負けません。

さて、今回は最近はやりのbashネタです。

某LINQ星人にPowerShell 3.0ならできるはず! と言われ、初めて気付き大変不覚の致すところです。

では早速。

tail -fって何

このサイトを見る人は、PowerShellに興味がある人でしょう。つまり、Shellに興味があるかMS系技術に興味があるか……、ShellならGNUでとかも触ってそうですね。

tail -fはファイルの監視コマンドです。-f, --followは、ファイルの内容を常に監視し、表示を更新します。

【 tail 】 ファイルの末尾を表示する

このコマンドで、ログファイルの更新を監視するとか、良くやる手段ですね。

Windowsでtail -fはないの?

cmdやPowerShell 2.0までは、標準シェル環境ではtail -fに該当するコマンドはありませんでしたが、PowerShell 3.0からは可能になりました。

コマンドもファイル読み込みのGet-Contentのまま、新たに-tailパラメータが追加されたという素敵仕様です。 正直コマンドを増やすよりは、パラメータの追加の方が嬉しいのは私だけでしょうか。

PowerShellでtail -fでする

PowerShellでtail -fするには以下のコマンドをPowerShell.exeやPowerShell_ISE.exe上で実行します。

Get-Content -Path "ファイルパス" -Wait -Tail "読み取り行数"

入力例:

Get-Content .\test.log -Wait -Tail 10

これでファイルが更新されるたびに画面が読み取り更新されます。

※5秒お気にGet-Processを実行して./test.logに追記しています。

1..100 | %{Get-Process | Out-File ./test.log -Append; sleep 5}

注意

-Tailは末尾から何行という指示ですが、-Waitで更新を待機しているため、実質全行読み取ります。 以下としてもほぼ変わりません。

Get-Content .\test.log -Wait -Tail 1

違いがあるとすれば、「初めて読み取った時に、元々ファイルに書き込まれていた末尾から何行読み取ってから待機するか」程度です。