kledgeb UbuntuやLinuxの最新情報を紹介

WSL その51 - BashからWindowsコマンドを呼び出すコマンドの実行例

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

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


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

  • Windows Interoperability

「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」に戻ります。



WSL
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 22.04 その98 - 入力ソースとキーボートレイアウトと日本語入力のカスタマイズ
    入力ソースとキーボートレイアウトと日本語入力 「Ubuntu」ではユーザーが利用しているキーボードレイアウトや日本語入力のカスタマイズが可能です。
  • Ubuntu 22.04 その64 - Windows/Linux/macOSでUbuntu 22.04 LTSのライブUSBメモリーを作るには
    Ubuntu 22.04 LTSのライブUSBメモリーを作る方法 Windows/Linux/macOSでPC向け「Ubuntu 22.04 LTS」のライブUSBメモリーを作る方法を紹介します。
  • Ubuntu 20.04 その74 - UbuntuとUEFIセキュアブート
    UbuntuとUEFIセキュアブート 「Ubuntu」と「UEFIセキュアブート」に関するお話です。
  • Ubuntu 22.04 LTSのインストール その5 - UEFI環境でパーティションの作成と構成 〜 ブートローダーのインストール先の選択
    UEFI環境でパーティションの作成と構成を行う UEFI環境でパーティションの作成と構成を行います。
  • Linux Mint その222 - Linux Mint 21.2の新機能と変更点
    Linux Mint 21.2の新機能と変更点 リリースノートから「Linux Mint 21.2」の新機能と変更点を紹介します。
  • Ubuntu 22.04 その107 - ローカルネットワーク上でフォルダーやファイルを共有するには
    ローカルネットワーク上でフォルダーやファイルを共有するには 「ファイル(Nautilus)」アプリはファイルマネージャーです。 「ファイル」はローカルネットワーク上でフォルダーやファイルを共有する仕組みを提供しており、簡単に他のPCとフォルダーやファイルをやりとりできます。
  • Ubuntuのバージョンと開発コードの対応表
    バージョンと開発コード 「Ubuntu」には各バージョンごとに開発コードが設定されます。
  • Ubuntu 22.04 その120 - UbuntuのブートローダーをBoot Repairで修復するには・Ubuntuが起動しないトラブルを解決
    UbuntuのブートローダーをBoot Repairで修復するには 「Boot Repair」はOSのブートローダーに起因するOSが起動しない問題を簡単に解決してくれるアプリです。
  • Ubuntu 23.04 その73 - Intel CPUに機密情報漏洩の脆弱性・GDS DownfallとUbuntuの対応方針
    GDS DownfallとUbuntuの対応方針 2023年8月8日、一部の Intel CPU で発生する機密情報漏洩の脆弱性情報が公開されました。 またこれに伴い2023年8月25日、Ubuntu のセキュリティーチームは本件に関する Ubuntu の対応方針をアナウンスしました。
  • WSL その219 - WSL 2のLinux kernelをアップデートするには・Linux kernelのバージョンを調べるには
    WSL 2のLinux kernelをアップデートするには 「WSL 2」の「Linux kernel」をアップデートする方法です。
記事のピックアップ
オプション