2012年5月22日火曜日

PowerShellでtail -fのようなことをやってみた

PowerShell覚え書き

お題

PowerShellでUnix上のtail -fみたいなことができるかやってみる。(目的はログファイルの垂れ流し)
param( [Parameter(Mandatory=$true)][String]$filename)

$lines = (gc $filename).length
gc $filename -wait |
    % -begin {$i=0} {if( $i -ge ($lines - 10)) {$_} ; $i++}

解説

  • とりあえず最後の10行だけ表示して、そのあとGet-Contentの-waitパラメータでパイプラインを開きっぱなしにしました。
  • パイプライン処理のところでAWKの組み込み変数NRに相当するものがないので、変数でカウントしました。(この機能が本当にないのなら将来追加されることに期待。)

    結果

    動かしてみたところ、うまくいった!と思ったら、ファイルの最後の行が改行文字で終わっていないと無駄に空白行がはいってしまうことが発覚しました。(最後の標準出力の部分の問題かと思い、pipelineでOut-GridViewとかやってみてもダメでした。)
    Get-Contentがパイプラインで次に渡す際に自動的に改行文字を入れているように見えるのですが、そんな仕様なのか-waitのバグか微妙なところです。
    とりあえず、ログファイルの垂れ流しには十分なので、これでおしまい。
  • 0 件のコメント:

    コメントを投稿