web-dev-qa-db-ja.com

Windowsスラッシュ(/)ベースのパラメーターをbashスクリプトからプログラムに渡す

私はbashスクリプトから以下を実行しようとしています。 (msysgit経由でインストールされたbash)

taskkill /IM ssh-agent.exe

taskkillから画面に表示される出力は次のとおりです。

ERROR: Invalid argument/option - 'C:/Program Files/Git/IM'.
Type "TASKKILL /?" for usage.

実行可能ファイルは実行中ですが、/IMは、それをエスケープするために何をしようとしても拡張されています...


私は\/IMを使用しようとしましたが、スラッシュをエスケープせずに\/IMを送信します。eval、cmd/c startなどを使用して実行するいくつかの異なる方法を試しましたが、それらはすべて問題があるようです。私もset -o noglobを試しましたが、これも機能しませんでした。 $'\057/'IMまたは同様の試みもしませんでした...

25
Tracker1

私のコメントは実際に答えを提供したので、投稿します。

_//_のように、スラッシュを別のスラッシュにエスケープしてはどうでしょうか。 _/r_パラメータをエスケープした場所でこのコマンドを実行すると、機能します:_start C:/folder/beep 2000 250 100 //r 3_

ソース: http://oldwiki.mingw.org/index.php/switches%20with%20forward%20slashes

ミニマリストGNU for Windows

MSYSでスラッシュを使用してスイッチを渡す

MSYSでは、 "/ c"のコマンドライン引数はC:ドライブとして解釈されるため、スラッシュで始まる引数を渡すには、2つのスラッシュを使用する必要があります。たとえば、MSYSでこのコマンドを使用するには:

_cmd /c echo foo_

使用する:

_cmd //c echo foo_

シェルスクリプトでWindowsスタイルのパスを使用する必要がある場合は、

x=$(cd /unix/path && cmd //c cd)

X変数には、/ unix/pathへのWindows対応パスが含まれています。

29
M. Mimpen

「bashファイルの拡張を無効にする」などのさまざまな検索を何時間も探した後、実行しようとしている実行可能ファイル"bash" "windows" taskkillを具体的に検索して見つけたので、見つけました この答え 、それは最終的に私のために働きました。

cmd " /c taskkill /F /IM ssh-agent.exe"
5
Tracker1