Search code examples
windowsbashmsysgit

Passing windows slash (/) based parameters to a program from bash script


I'm trying to run the following from my bash script. (bash installed via msysgit)

taskkill /IM ssh-agent.exe

The output I get on the screen from taskkill is:

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

The executible is running, but the /IM is being expanded regardless of what I try to do to escape it...


I've tried using \/IM but then it sends \/IM without escaping the slash, I've tried a few different ways of running it through eval, cmd /c start, etc... but they all seem to have issues. I've also tried set -o noglob, which also didn't work. neither did $'\057/'IM or similar attempts...


Solution

  • Since my comment actually provided the answer, I'll post it.

    How about escaping a forward slash to another forward slash like //. It works for me when I execute this command where I escaped the /r parameter: start C:/folder/beep 2000 250 100 //r 3

    Source: http://oldwiki.mingw.org/index.php/switches%20with%20forward%20slashes

    Minimalist GNU for Windows

    Passing switches with forward slashes under MSYS

    In MSYS a command line argument of "/c" is interpreted as the C: drive, so to pass any argument beginning with a forward slash you need to use two forward slashes. For example, to use this command in MSYS:

    cmd /c echo foo

    Use:

    cmd //c echo foo

    If you need to have the windows-style of a path in a shell script, you can do

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

    The x var now contains the windows equivalent path to /unix/path