山田 徹
ホーム

読み込み中です。

読み込み中です。

はじめに

WindowsでLinuxのコマンドが使用できるようになる「busybox64.exe」。busybox64.exe自体はCUIで使用するためのものなので、実行ファイルをダブルクリックしてもコマンドプロンプトのような黒背景、白文字のウィンドウは表示されない。実際には一瞬起動したと思えば、直後に消える。これは引数を指定していないためヘルプを表示したあとプログラムが終了するためである。

上の画像のように、busybox64.exeを使用するにはコマンドプロンプトやPowerShellのようなアプリケーションから「busybox64.exe sh」のように打って起動するしかないのである。しかし、毎回busybox64.exe shと打ってLinuxシェルを立ち上げるのは大変である。

また、busybox64 shと打って起動する場合、shの設定ファイルである.profileが読み込まれない。そこまでこだわりのない人やちょっとの仕事の為に起動するだけなら問題ないのだが、私のように普段からLinuxを使い、標準のプロンプト(yamada> や ~ $のようなもの)を見ると変更したくなる衝動に駆られ、様々なアプリケーションをProgram Filesにインストールしない特殊な人は、どうしても.profileを読み込みたいのである。ただ.profileを読み込むだけならば「busybox64 sh -l」と-lオプションを使用すればいいのだが、このオプションを使用するとカレントディレクトリがホーム(~)にされてしまうのである。どうせならbusybox64 shを実行しているコマンドプロンプトのカレントディレクトリで起動したい。(Linuxで言うと、”ここでターミナルエミュレーターを開く”のような感じ)

そこでコマンドプロンプトやPowerShell、Macでいうと端末、Linuxではターミナルエミュレータのようにダブルクリックした後に起動できるようにする。

独自コマンド「winsh」

結論を言うと、独自コマンドを作成するしかない。メモ帳で作り、コンパイルやビルドは行わない。(というか私ができない)...が、バッチファイルとシェルの2言語(?)を行き来するので少し複雑になる。このコマンドを作成することにより、コマンドプロンプトでは「winsh」と打てばそのカレントディレクトリでbusybox64.exe shが起動し、winshのショートカットを作成すればダブルクリックで起動することができる。

注意

コピペで正常に作動するかわからない(多分動かない)為、ある程度シェルを理解できる必要がある。また、パスはそれぞれの環境に合わせて書き換えてほしい。(まぁ、busybox64.exeを使いたいという人がシェルが読めないとは思えないが...。)リダイレクトやif文、testコマンドが分かれば大丈夫。

私はバッチファイルに関しては本当にダメなので、大部分はシェルで書きます。(と言ってもバッチファイルも多少書きます)

※私はWindows10 64bitで作成しています。また、既にbusybox64.exeはダウンロードされており、パスが通っていると仮定します。

winsh.batを作る

まず、どこでも良いが、busybox64.exeが配置されているディレクトリに「winsh.bat」をメモ帳等で作成する。作成したあと、以下のように書き込み保存する。


@echo off
set HOME=C:/tools/busybox/home
echo %CD% $lt;C:/tools/busybox/home/newterm_dir.txt
C:/tools/busybox/busybox64.exe sh -l
exit

パスは絶対パスで書くこと。どこでwinshを呼ぶかわからないからである。

各行について解説する。
最初の@echo offはwinshをショートカット経由で起動したとき、後のsetやecho等のコマンドが表示されてしまうのを防ぐ。別に気にならないなら良いが、私は気になって、気になってしょうがない(一応2回言う)
2行目のset HOME...はbusybox64.exeのホームディレクトリを変更している。別の記事で書いたが、これは.profileや.ash_history等のファイルがここで指定したディレクトリに保存される。書かないとWindowsのホームディレクトリ(デスクトップやダウンロード、ドキュメントがある場所)になる。私はWindowsのホームディレクトリをあまり汚したくないので書いているだけ。
3行目のecho %CD% ...は今回のミソ。コマンドプロンプトでwinshを起動したときに、winshを呼んだカレントディレクトリ(%CD%に格納されている)を一時ファイルに書き出している。このカレントディレクトリの情報をbusybox64.exe shが起動したあとに.profileでそこへ移動する。
4行目のC:/ ...はbusybox64 shを起動している。もちろん、-lオプションを使用すること。これを使用しないと.profileが読み込まれない。(これも別記事で書いたかな)
最終行のexitはコマンドプロンプトでwinshを呼びshで作業を行ったあと、またコマンドプロンプトに戻るかどうか、それともwinshを起動し、終了させたらコマンドプロンプトを終了させるかである。私はshを開いたらもうコマンドプロンプトには用は無いのでshの終了と同時にコマンドプロンプトも終了させる。ここは好みが分かれるのではないだろうか。

.profileを変更する

winshを起動するとカレントディレクトリ情報が、上記の例ではC:/tools/busybox/home/newterm_dir.txtに保存される。それをbusubox64 shが起動したあとにそこファイルを読み込み、書かれているディレクトリに移動する。


if [ -f C:/tools/busybox/home/newterm_dir.txt ];then
  cd `cat C:/tools/busybox/home/newterm_dir.txt`
  rm C:/tools/busybox/home/newterm_dir.txt
else
  cd C:/Users/yamada/Desktop
fi

パスは例であり、適宜書き換えてほしい。C:/tools/busybox/home/newterm_dir.txtはwinsh.batの3行目と同じパスにすること。

解説すると「C:/tools/busybox/home/newterm_dir.txtがファイルだったら(存在していたら)、"C:/tools/busybox/home/newterm_dir.txtを表示する"へ移動しろ、つまりnewterm_dir.txtに書かれているディレクトリに移動しろということである。rmは削除。ここで削除しないとwinsh経由でなく、普通に「busybox64.exe sh -l」と打つとnewterm_dir.txtに書かれたディレクトリに飛ばされてします。else以下は、もしnewterm_dir.txtが存在しなかったらとりあえずホームディレクトリに移動するということ。これは「busybox64 sh -l」と打たれて起動したときにDesktopに移動するというものである。通常WindowsのホームディレクトリだがWindowsはGUIでデスクトップのほうがアクセスが良いので私はデスクトップにしている。最後のfiはif文の最後に書かなくてはならないもの。これはシェルスクリプトに関することなので詳しい解説は割愛(いや、割愛できていない)

winshをアプリ化

これでコマンドプロンプトでwinshと打てばそのディレクトリでbusybox64.exe shが起動する。これで特定のディレクトリでShift + 右クリック、「PowerShellウィンドウをここで開く」を選択し、winshと打てばいちいちcdしなくても簡単に起動することが可能になった。しかし、いちいちコマンドプロンプトを起動してwinshと打つのは面倒。アプリ化し、ダブルクリックしてshを起動したい。また、それをタスクバーにピン留めし、瞬間で開きたい。busybox64.exeのソースコードからアプリ化をするのは面倒なので先程作ったwinsh.batのショートカットを作り、アプリ化する。※アプリ化はwinshにリンクしたショートカットの作成の事を言います。別環境にコピペで移動すると起動しない可能性があります。

winshのショートカットを作る

まずwinsh.batのあるディレクトリに移動し、右クリック -> ショートカットの作成を行う。すると同ディレクトリに「winsh.bat - ショートカット」というショートカットが作成される。これで終わりかと思いきや、このショートカットはピン留めすることができない。(なぜだ...)そこで作成したショートカットを右クリック、プロパティから「ショートカット」タブを開く。

ここで、「リンク先(T):」を

C:\Windows\System32\cmd.exe /c C:/tools/busybox/winsh.bat
に変更し、「作業フォルダ(S):」を

C:/Users/yamada/Desktop
に変更する。

上の図のようになると思う。名前から「ショートカット」を消したり、アイコンを変えたりしたほうが見栄えが良くなる。ちなみに、アイコン変更でbusybox64.exeを選択すると図のようなアイコンになる。shなのでコマンドプロンプトのアイコンとは違ったものにしたいところである...。

これで、スタートメニューやタスクバーにピン止めすることができるようになり、ダブルクリックでかんたんに起動できるようになった。

最後に

自分でこのショートカットを作成してからとても便利になったと感じている。busybox64.exeは単体の実行ファイルだが、工夫すればとても便利なツールになり、その素晴らしさに改めて感動した。(busybox64.exeの製作者に感謝します)Linuxまで自由度がないWindowsだが、工夫によりLinuxに近づけることはできると思う。自分のPCをどんどん工夫、改造して最高のパソコンライフを送ってほしい。

雑感

会社の制限が緩かったら自宅からLinuxPC持ってくるんだけどなぁ。busybox64.exeはインストール不要だから愛用してるけど、これ、バレたらどうなるんだろうか。まぁ、これのお陰で仕事が1.5倍速ぐらいになっているから許してもらえるでしょう。(自己責任で行ってください)
山田でした。