Windows 上の Bash の $() に相当するものはありますか?

Windows 上の Bash の $() に相当するものはありますか?

Bash では、サブシェルを使用して、1 つのコマンドの結果を次のコマンドに入力できます。

$ echo $(sub-command args)

$(sub-command args)標準出力に書き込まれる場合foo、上記のコマンドは以下と同等になります。

$ echo foo

Windows 7 でこれを行う方法はありますかcmd.exe?

これを実行する理由は、パスにそのディレクトリがなくても、npm のインストール ディレクトリから実行ファイルを簡単に実行できるようにするためです。

$ $(npm bin)/grunt build

答え1

コメントで既に述べられているように、cmd でこれを行うネイティブな方法はありません。ただし、あなたのケースに使用できるハックがあります ( npm bin1 行のみを返すため)。

for /F "tokens=*" %n IN ('npm bin') DO @(%n\grunt build)

またはバッチ ファイル内で以下を複製する必要があります%:

for /F "tokens=*" %%n IN ('npm bin') DO @(%%n\grunt build)

代替案

バッチ

パラメータを受け取ってコマンドを実行するスクリプトを生成することができます。

:: Takes the parameters and send to npm bin output
for /f "tokens=*" %%n in ('npm bin') do @(%%n\%1 %2 %3 %4 %5)

パスに npmbin.cmd として保存し、次のコマンドを実行します。

npmbin.cmd grunt build

パワーシェル

あなたの場合、invoke-expression コマンドレットを使用して PowerShell から呼び出すことができるはずです。

iex "$(npm bin)\grunt build"

現時点では npm はインストールされていませんが、他のプログラムでテストしたところ、動作するようです。

環境変数

とにかく、前のものは非常に複雑な「解決策」だと思いますが、あなたはコマンドを単純化したいだけです。たとえば、グローバル変数を作成して、NPMBINそれをコマンドに使用できるかどうか疑問に思っていました。

%NPMBIN%\grunt build

setxこれを拡張するには、次のようなバッチを使用して、ユーザー (または最終的にはコンピューター) に対してプログラムで設定するタスクを設定できます。

for /f "tokens=*" %%n in ('npm bin') do @(setx NPMBIN %%n)

お役に立てれば幸いです。よろしくお願いいたします

関連情報