kledgeb Ubuntuの使い方や日本語化、アプリの使い方を紹介しています。 Ubuntuの最新情報も紹介しています。

BashからWindowsコマンドを呼び出す

「WSL」は、Windowsバイナリーを直接「WSL」のコマンドライン(Bashなど)から呼び出せるようになりました。


ここでは「Bash」から「Windows」コマンドを呼び出すコマンドの実行例を紹介します。


「Linux」から「Windows」バイナリーを実行すると、以下の内容が適用されます。

  1. Bashと同じワーキングディレクトリーが設定される
  2. Bashを起動している「bash.exe」と同じ権限が適用される
  3. Windowsバイナリーは、現在アクティブなWindowsユーザーとして実行される
  4. CMDからWindowsバイナリーを実行した時と同様に、タスクマネージャーにアプリ(プロセス)が表示される

1.メモ帳を起動する例

ここでは例として、「Bash」からWindowsアプリである「メモ帳」を起動しています。
「Bash」から以下のコマンドを実行します。

/mnt/c/Windows/System32/notepad.exe


以下のように「メモ帳」が起動します。


Windowsのプログラムが終了するまで戻らない

Linuxのプラグラムと同じように、Windowsのプログラムが終了するまで「Bash」のプロンプトには戻りません。
「WSL」では、WindowsのプログラムをLinuxのプログラムと同じように扱います。

2.ファイルパスを含むコマンドの実行例

ファイルパスを含むコマンドを実行する際、ファイルパスの基準は「WSL」のパスが基準になります。
すなわち、「/(VolFs)」が基準になります。

またコマンドを検索するパスリストは、デフォルトで以下のようになっています。


例えば「メモ帳」を起動する際、環境変数「PATH」に「メモ帳」のパスを追加しておけば、パスの指定なしに「メモ帳」の起動が可能になります。

export PATH=$PATH:/mnt/c/Windows/System32
notepad.exe


3.パイプでWindowsコマンドとLinuxコマンドをつなぐ例

パイプでWindowsコマンドとLinuxコマンドをつなぐ例です。
Windowsコマンドの出力結果をLinuxコマンドが受け取り、処理を行います。

ここでは例として、Linuxコマンドの「grep」でフィルタリングを行います。
「Bash」から以下のコマンドを実行します。

ipconfig.exe | grep IPv4 | cut -d: -f2


Windowsコマンドのパス指定を省略するため、「2.」で紹介したPATH環境変数の設定を事前に行っています。

4.パイプでLinuxコマンドとWindowsコマンドをつなぐ例

パイプでLinuxコマンドとWindowsコマンドをつなぐ例です。
Linuxコマンドの出力結果をWindowsコマンドが受け取り、処理を行います。

ここでは例として、Windowsコマンドの「findstr」でフィルタリングします。
「Bash」から以下のコマンドを実行します。

ls -la | findstr.exe bash


Windowsコマンドのパス指定を省略するため、「2.」で紹介したPATH環境変数の設定を事前に行っています。

5.Bashからコマンドプロンプトを実行する例

「Bash」から「コマンドプロンプト」を起動してみます。

cmd.exe


「コマンドプロンプト」が起動しました。
Windowsコマンドのパス指定を省略するため、「2.」で紹介したPATH環境変数の設定を事前に行っています。

「exit」すれば「Bash」のプロンプトに戻ります。


BashからWindowsコマンドを呼び出す時の注意事項

「Bash(WSL)」から「Windowsコマンド」を呼び出す時の注意事項です。
いくつか制約があるため注意してください。

1.拡張子の指定が必須

必ず実行ファイルの拡張子を指定してください。
例えば以下の記述で「メモ帳」を起動することは出来ません。

notepad

以下のように必ず拡張子の指定が必要になります。

notepad.exe

2.大文字小文字の区別

実行ファイルのファイル名は、大文字/小文字を区別します。
例えば以下の記述で「メモ帳」を起動することは出来ません。

NOTEPad.EXE

以下のように必ずファイル名の大文字/小文字をあわせて指定する必要があります。

notepad.exe

3.実行可能なファイルでなければならない

実行ファイルは、必ず実行可能なファイルでなければなりません。
実行可能ではないファイルを「Bash」から直接起動することは出来ません。

もしコマンドプロンプト経由で実行できるものであれば、以下のように実行することが出来ます。

/mnt/c/Windows/System32/cmd.exe /C 実行したいコマンドや内容

4.パラメーターはそのまま渡される

実行ファイルに指定したパラメーター(オプション)は、その実行ファイルにそのまま渡されます。

例えば以下のコマンドを「Bash」から実行すると、「C:\temp\test.txt」ファイルを「メモ帳」で開きます。

notepad.exe "C:\temp\test.txt"

5.VolFS内のファイルはWindowsアプリから編集しないこと

VolFs」内のファイルはWindowsアプリから編集しないでください。

Windowsエクスプローラーから見ると、「%localappdata%\lxss」以下に配置されているファイルのことです。
「Bash(WSL)」から見ると、「/mnt/ドライブレター」以外に配置されているファイルのことです。

6.作業ディレクトリーはWSLの作業ディレクトリーに追従する

デフォルトでは、「WSL」はWindowsバイナリーの作業ディレクトリーを、現在の「WSL」の作業ディレクトリーとして可能な限り維持しようとします。

しかし作業ディレクトリーが「VolFs」上のディレクトリーを指す場合は、「WSL」
のインスタンスが生成されたディレクトリーを作業ディレクトリーに設定します。(フォールバック)

作業ディレクトリーのフォールバックの例

上記「5.」の作業ディレクトリーのフォールバックの例です。

1.bashの起動

「コマンドプロンプト」の現在の作業ディレクトリーが「C:¥temp」であるとします。
この状態で「Bash」を起動すると、「Bash」の作業ディレクトリーは以下のように「/mnt/c/temp」になります。


2.作業ディレクトリーの移動

「cd ~」を実行し、「VolFS」上のディレクトリーである「~(ユーザーのホームフォルダー)」に移動します。


作業ディレクトリーは「~(ユーザーのホームフォルダー)」になります。

3.メモ帳の起動と作業ディレクトリーのフォールバック

「メモ帳」を起動してテキストファイルを作成します。

「WSL」の作業ディレクトリーは、「~(ユーザーのホームフォルダー)」であり、このディレクトリーは「VolFS」上にあるため、「メモ帳」の作業ディレクトリーは「WSL」を起動した「C:¥temp」に設定されます。


4.ファイルの保存

ファイルを保存しようとすると、作業ディレクトリーである「C:¥temp」フォルダーが表示されます。


5.ファイルの検索

「メモ帳」を終了して「3.」で保存したファイルを検索してみます。
「Bash」のプロンプトに戻ると、作業ディレクトリーは「~(ユーザーのホームフォルダー)」になっています。

ファイルを検索しても先ほど保存したファイルは見つかりません。


6.コマンドプロンプトに戻る

「exit」を実行して「コマンドプロンプト」に戻ります。
以下のように作業ディレクトリーは「C:¥temp」に戻ります。



関連コンテンツ
同一カテゴリーの記事
コメント
オプション