2

custom build tasksは、Visual Studio 2017でDocBookベースのドキュメントをビルドするためにbashを使用できるようにしようとしています.Windows 10のLinux用の組み込みWindowsサブシステムを使用します。cmd.exeを起動し、MSの例のようにdirを実行できます。しかし、私はbashでmake ARGSを実行する必要があると私はそれがで失敗ところです:Visual Studio 2017(ディレクトリベースのプロジェクト)で任意のビルドタスクからbashを実行するには?

'"bash"' is not recognized as an internal or external command, 
    operable program or batch file. 

私は対話的にcmd.exeを実行し、問題なくbashのを開始することができます。しかし、それはVisual Studioで失敗します。 VS2017は特別な環境を使用していますか?どのようにそれらのタスクを介してbashを実行させるには?私は何かが非常にシンプルで些細なものを見逃していると思うが、私はどこを見るか理解していない。

本質的には、私のDocBookソースでパスに対してmake all-htmlコマンドを実行したいとします。ここで

は、最小限のタスクの例である:あなたのリンクから

{ 
    "version": "0.2.1", 
    "tasks": [ 
    { 
     "taskName": "Build all-html", 
     "appliesTo": "*", 
     "type": "command", 
     "command": "bash" 
    } 
    ] 
} 

答えて

3

Visual Studioが32ビットプログラムであるため、コマンドが自然に見つからない理由は、あなたが期待するようにbashです。これは、コマンドを指定するときに64ビットのcmd.exeを使用しないことを意味します。

32ビットコマンドウィンドウC:\Windows\SysWOW64\cmd.exeを開いてそこからbashコマンドを試して、Visual Studioの動作を再現することができます。

解決策は、C:\Windows\Sysnative仮想フォルダ経由で直接bash.exeを呼び出すことです。

Sysnativeフォルダの説明と説明、および必要な理由はhere in the official Bash on Windows GitHubです。ここで

はあなたのために動作するはずのコマンド例です:

{ 
    "taskName": "print-pwd", 
    "appliesTo": "*", 
    "type": "command", 
    "command": "%WINDIR%\\Sysnative\\bash.exe", 
    "args": [ 
    "-c", 
    "pwd" 
    ] 
} 
1

右、ドキュメントはCMDを使用して出力を一覧表示する例を示します:あなたはcmd.exeを使用する${env.COMSPEC}を使用する必要があり、その後、引数としてbashできます。

{ 
    "version": "0.2.1", 
    "tasks": [ 
    { 
     "taskName": "Build all-html", 
     "appliesTo": "*", 
     "type": "command", 
     "command": "${env.COMSPEC}", 
     "args": [ 
     "bash" 
     ] 
    } 
    ] 
} 

対話モードでこの実行bashのが、あなたは、このようなbash -cでbashのコマンドを与えることができます:bash -c 'echo "$PATH"'

注:これは、ソリューションのルートディレクトリ(これはbash -c 'echo $PWD'で確認できます)でbashを実行します。

+0

これはWindowsの64ビット版では動作しません。 – bahrep

+0

私もWindows 64-bitを実行していますが、 '%SystemRoot%\ system32 \ cmd.exe'を値として' COMSPEC'システム環境変数を持っていますか? –

+0

'%COMSPEC%'は 'ComSpec = C:\ Windows \ system32 \ cmd.exe'です。 – bahrep

関連する問題