Engineer's Notebook

コンピュータ関係のTipsやお役立ち情報などをエンジニアが綴ります

バッチファイルからBashシェルスクリプトを実行する方法

投稿日:

Cygwin + Bashシェルスクリプトってほんとに便利!

最近はBash on Windowsが流行りですが、まだまだCygwinの出番も多いですよね。

そんな便利なBashシェルスクリプトですが、Batファイルと違ってエクスプローラーから直接実行できないのが難点です。

そんなときはBashシェルスクリプトを起動するBatファイルを作ってみましょう。

ここからの解説はCygwinを前提にしていますので、あらかじめCygwinをインストールしておいてください。

 

スポンサーリンク

バッチファイルからBashシェルスクリプトを実行する方法

bash.exeにコマンド(シェルスクリプト)を渡すことでバッチファイルからBashシェルスクリプトを実行することができます。

このサンプルbatにファイルをドラッグアンドドロップすると、そのファイルの情報をlsコマンドで表示することができます。

では、サンプルの解説です。

 

スポンサーリンク

サンプルバッチの解説

@SETLOCAL, @ENDLOCAL
@SETLOCALと@ENDLOCALで囲むと、その中で設定した環境変数はその範囲内でだけ有効になります。その外側には影響を及ぼさないので、環境変数をローカル変数として扱うことができます。これは便利!

@SET PATH="C:\cygwin64\bin";%PATH%
bash.exeやcygpath.exeなどのCygwinコマンドのパスを設定しておきます。

@CHERE_INVOKING=yes
Bashシェルを起動したときのカレントディレクトリをCygwinのホームディレクトリにcdせず、今のカレントディレクトリのままでBashシェルを起動します。このサンプルでは意味ありませんが、覚えておくと便利です。

@LANG=ja_JP.SJIS
Bashシェルで日本語表示できるようにします。これをしておかないと日本語が文字化けします。

@FOR /F %%f in ('cygpath.exe -u %1') do @SET FILE=%%f
第一引数で渡されたファイル名(ドラッグアンドドロップされたファイル名)をCygwinのパスに変換して環境変数FILEに代入します。しかし、なんでコマンドの実行結果を得るのにこんな冗長な記述しなきゃいけないんでしょうね。Bashなら `コマンド` で済むのに。

@bash.exe --login -i -c "ls -l %FILE% ; read -p \"hit enter key...\""
Bashシェルスクリプトを実行し、""で囲まれた箇所のコマンドを実行します。ここをシェルスクリプトファイル名に変えれば、そのシェルスクリプトを実行することができます。

ちなみに、コマンド前の@は『コマンドプロンプトにコマンドを表示せずに実行する』という意味です。

 

めちゃくちゃ便利!

BashシェルスクリプトをBatファイルでラッピングするという一見技術の無駄遣いっぽい方法ですが、こうしておくと

  • Bashシェルスクリプトをダブルクリックで起動できる
  • ファイルのドラックアンドドロップでBashシェルスクリプトを起動できる

などすごく便利です。

Bashシェルスクリプトを実行するのにわざわざCygwimターミナルを立ち上げるのはちょっとストレスなんですよね。この方法ならストレスフリーでBashシェルスクリプトを実行できます。

アドセンス 336x280

アドセンス 336x280

関連コンテンツ

いまあなたにおすすめ

-Tips, Windows

Copyright© Engineer's Notebook , 2019 All Rights Reserved Powered by AFFINGER5.