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

Tracker1 picture Tracker1 · Jan 7, 2016 · Viewed 10.5k times · Source

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...

Answer

M. Mimpen picture M. Mimpen · Aug 26, 2016

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