Windows 10 Anniversary UpdateからサポートしたWSL(Windows Subsystem for Linux)。その結果としてWindows 10上でもBashを始めとするLinuxコマンドが利用可能になった。本連載ではWSLに関する情報や、Bashから実行するシェルスクリプトを紹介する。

棒グラフを表示する「Spark」を導入する

BUW(Bash on Ubuntu on Windows)を使用するメリットの1つは、充実したCUI環境にあるが、普段からWindows 10を使っていると視覚的な情報を見慣れているせいか、どうしてもコマンドの出力結果が簡素に見えてしまう。これをデメリットと呼ぶべきか呼ばざるべきかは、利用者のスキルや使用スタイルによって異なるものの、より多くの情報を提示できるのであれば、それに越したことはない。

あくまでもコンソール(端末)ベースでグラフを表示できないかと検索としたところ、Zach Holman氏によるシェルスクリプト「Spark」に出会うことができた。このシェルスクリプトは受け取った数値を元に棒グラフを作成するというもの。作成するグラフは絶対値ではなく、受け取った最小値と最大値がそれぞれ、最小・最大になるように調整している(シェルスクリプト内で演算している)。

「Spark by holman」

GitHub上のWikiに目をとおすと、APIの呼び出し履歴をグラフ化するサンプルや無線LANのリンク品質を可視化するサンプルなどが並び、アイディア次第で自由に活用できそうだ。SparkをBUWで使用するには、GitHub上から圧縮ファイルをダウンロードし、自身の実行ファイル用ディレクトリとなる「~/bin」や「/usr/local/bin」などに展開すればよい。

公式サイトからTARボールをダウンロードする

「~/bin」が存在しない場合は、事前に作成しておく

TARボールを展開し、「spark」を「~/bin」などにコピーする

BUWの場合、「~/.profile」で「~/bin」にPATHをとおすことができるため、「source ~/.profile」を実行すれば、カレントディレクトリに左右されずにsparkを実行可能になる。なお、グラフはUnicodeの0x2581~0x2588を使用しているため、「ConEmu」など一部の端末では正しく表示されない。その場合はUnicodeの範囲を変更することで、問題を回避しよう。

このように文字化けしてしまう場合は文字コードの確認が必要だ

「ConEmu」の場合、「Unicode ranges」を「CJK~」に変更する

こちらはサンプルコードを試した状態。ご覧のとおり文字化けは解消された

ドライブを占有するフォルダーをひと目で確認する(&spark)

さて、前回のシェルスクリプトを流用し、Sparkと組み合わせよう。まずは以下のコードをvimなどのテキストエディターにコピー&ペーストし、chmodコマンドで実行権限を付与してから、お試し頂きたい。

 #!/bin/bash

 TargetDir=/mnt/c/Windows/*
 TmpFile=$(mktemp)

 du -s $TargetDir 2>/dev/null | sort -n | tail -10 > $TmpFile
 cat $TmpFile
 cat $TmpFile | cut -f1 | tr '\n' ' ' | spark
 rm $TmpFile

こちらのシェルスクリプトを実行すると、前回と同じくドライブを占有するフォルダー(ディレクトリ)に加えて、Sparkによる棒グラフが示される。今回のシェルスクリプトでは6行目で前回同様「du」コマンドを実行しているが、純粋な数値を取得するためオプション「-h」を取り除いた。また、実行結果を数回利用するため、一時ファイルに出力している。

今回は出力結果の安全性を担保するため、「/tmp/tmp.zJqwP8ng1J」などランダムな文字列を用いたファイルを使用する「mktemp」コマンドを使用。その結果を変数「TmpFile」に代入した。7行目は一時ファイルを標準出力に、8行目は「cut」「tr」と2つのコマンドでテキスト整形を行ってからSparkに渡し、9行目で一時ファイルを削除して処理完了となる。

シェルスクリプトの実行結果

阿久津良和(Cactus)