Windowsで grep/cut/uniq などを手軽に使いたかったので、busybox 使ったメモ。
インストーラではなく実行ファイルのみなので、レジストリも汚さない。
入手先
https://frippery.org/busybox/
「busybox.exe」のダウンロードリンクがある。
ダウンロード後、念のため VirusTotal でチェック。
VirusTotal でチェック時に、ハッシュ値も確認する。
自分が入手時は以下のもの。
The latest executable is 419,840 bytes in size. Its sha256sum is:
44493dc69c1f435fe07e47b8fab5602391941cb798eb40d369c7cd47fb82cfba
なお、WindowsのPowerShell 4.0以降(Windows 8.1 / 2012 R2以降)なら、次のようにハッシュ値を計算できる。
PS > Get-FileHash .\busybox.exe -Algorithm SHA256
◆使用例
PowerShellまたはコマンドプロンプトにて、以下のようにする。
PS> busybox ls -a DOS> busybox ls -a
これだと grep を多段にする時なんかに面倒なので、busybox を省略できるようにしたい。
busybox のコマンドのハードリンクを任意のフォルダに作成する。
例えば、E:\test-busybox にコマンド群を展開する場合。
PS> .\busybox --install E:\test-busybox
上記のフォルダ内では、busybox を省略してコマンドを実行できる。
PS E:\test-busybox> ls -a
PowerShellの場合、パイプでgrepやcutを使う場合、下記のようにするとエラーになる。
PS E:\test-busybox> cat access_log | grep -i error grep : 用語 'grep' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 発生場所 行:1 文字:18 + cat access_log | grep -i error + ~~~~ + CategoryInfo : ObjectNotFound: (grep:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException Suggestion [3,General]: コマンド grep は見つかりませんでしたが、現在の場所に存在します。Windows PowerShell は、既定では、現在の場所からコマンドを読み込みません。このコマンドを信頼する場合は、".\grep" と入力してください。詳細については、"get-help about_Command_Precedence" と入力してヘルプを参照してください。
メッセージの通り、PowerShellの場合、パイプ以降では .\ を指定する必要がある。
PS E:\test-busybox> cat access_log | .\grep -i error PS E:\test-busybox> cat access_log | .\grep -i error | .\cut -f 1-5
一方、DOSプロントの場合は、.\ を指定する必要はない。
DOS E:\test-busybox> cat access_log | grep -i error
また、busybox-w32 では、コマンドラインでワイルドカードを使用できない。
公式ドキュメントに記載されている。
https://github.com/rmyorston/busybox-w32/blob/master/README.md
Wildcard expansion is disabled by default, though it can be turned on at
compile time. This only affects command line arguments to the binary:
the BusyBox shell has full support for wildcards.