ホームページ » の仕方 » Windows 10のBashシェルからWindowsプログラムを実行する方法

    Windows 10のBashシェルからWindowsプログラムを実行する方法

    Creators Updateでは、Windows 10のBashシェルで、Bashから直接Windowsバイナリと標準のコマンドプロンプトコマンドを実行できるようになりました。 LinuxとWindowsの両方のプログラムを同じBashシェルから実行することも、WindowsコマンドをBashスクリプトに組み込むこともできます。.

    知っておくべきこと

    この機能について知っておく必要がある基本的な詳細は次のとおりです。

    • ユーザーアカウント:Bashシェルから起動されたプログラムは、現在のWindowsユーザーアカウントによって起動されたかのように実行されます。.
    • 許可注:これらのプログラムはBash.exeプロセスと同じ権限を持ちます。そのため、これらのコマンドに管理者アクセス権を与えたい場合は、管理者としてBashシェルを実行する必要があります。.
    • 作業ディレクトリWindowsプログラムはBashシェルと同じ「作業ディレクトリ」を共有します。したがって、現在のディレクトリの内容を一覧表示するコマンドを実行すると、Bashシェルの現在の作業ディレクトリの内容が一覧表示されます。使用 cd 作業ディレクトリを変更するコマンド.

    それを念頭に置いて、プログラムの実行方法を見てみましょう。.

    Windowsプログラムを実行する方法

    Windowsプログラムを実行するには、Bashシェルにプログラムの.exeファイルへのパスを入力します。 Windows C:ドライブはBashの/ mnt / cにあります。 Bash環境でも大文字と小文字が区別されるため、大文字と小文字を正しく指定する必要があります。.

    C:\ Windows \ System32 \ PING.EXEにあるPingユーティリティを起動したいとしましょう。次のコマンドを実行します。

    /mnt/c/Windows/System32/PING.EXE

    Bashでは大文字と小文字が区別されるため、次のコマンドは機能しません。

    /mnt/c/windows/system32/ping.exe

    Program Filesフォルダのように、パスにスペースや角かっこなどの複雑な文字が含まれている場合、これはもう少し複雑です。スペース、大括弧、その他の複雑な文字の前に「\」を付けてエスケープする必要があります。.

    たとえば、C:¥Program Files(x86)¥Internet Explorer¥iexplore.exeにあるInternet Explorerプログラムを実行したいとします。 Bashで次のコマンドを実行する必要があります。

    / mnt / c / Program \ Files \ \(x86 \)/ Internet \ Explorer / iexplore.exe

    スペースと大括弧の前にある「¥」に注意してください。これらの文字は「エスケープ」する必要があります。そうしないと、Bashはその文字がファイルパスの一部であることを認識しません。.

    引数をコマンドに渡す方法

    Bashシェルは、実行したコマンドに直接引数を渡します。.

    たとえば、example.comにpingを送信したい場合は、次のように実行します。

    /mnt/c/Windows/System32/PING.EXE example.com

    あるいは、メモ帳でWindowsのhostsファイルを開きたい場合は、次のように実行します。

    /mnt/c/Windows/System32/notepad.exe "C:\ Windows \ System32 \ drivers \ etc \ hosts"

    ファイルパスをWindowsプログラムに直接渡すときは、標準のWindowsファイルパスを使用します。これは、Bashが直接引数を渡すからです。 Notepad.exeやその他のWindowsプログラムでは、Windowsファイルパスが必要です。.

    組み込みコマンドを実行する方法

    一部のWindowsコマンドは.exeファイルではありませんが、コマンドプロンプト自体に組み込まれています。たとえば、これには 方向 通常はコマンドプロンプトで実行します。そのようなコマンドを実行するには、次のコマンドを実行する必要があります。 cmd.exe 次のように、コマンドプロンプトに関連付けられたバイナリを/ C付きの引数としてコマンドに渡します。

    /mnt/c/Windows/System32/cmd.exe / Cコマンド

    たとえば、 方向 コマンドをコマンドプロンプトに組み込んだ場合は、次のコマンドを実行します。

    /mnt/c/Windows/System32/cmd.exe / C dir

    パスにディレクトリを追加する方法

    Windows Services for Linux環境は、WindowsバイナリーをLinuxバイナリーの扱いと同じように扱います。つまり、パスに.exeファイルを含むディレクトリを追加してから、それらの.exeファイルを直接実行することができます。たとえば、System32ディレクトリをパスに追加するには、次のように実行します。

    エクスポートパス= $パス:/ mnt / c / Windows / System32

    次に、System32フォルダにあるWindowsの.exeファイルを直接実行します。

    PING.exe example.com
    notepad.exe
    cmd.exe / Cディレクトリ

    あるコマンドの出力を別のコマンドにパイプ処理する方法

    Windowsコマンドの出力はLinuxコマンドにパイプで送ることができ、またその逆も可能です。たとえば、 ipconfig.exe - すべて ネットワークインターフェースの詳細をリストしてそれをLinuxにパイプするコマンド grep 出力を検索するコマンド。たとえば、接続に関するすべての情報を一覧表示し、「IPv4 Address」に一致するセクションを検索するには、次のように実行します。

    /mnt/c/Windows/System32/ipconfig.exe -all | grep "IPv4アドレス"

    それが基本的なプロセスです。これらのコマンドはBashスクリプトに組み込まれたときにも機能するので、WindowsコマンドとLinuxユーティリティの両方を組み込んだBashスクリプトを書くことができます。それがBashシェルで実行される場合、それはBashスクリプトで動作します.

    それ以外の方法でやりたい場合は、「bash -c」コマンドを使用して標準のWindowsコマンドプロンプトからBashコマンドを実行できます。.