调用 cygwin bash -c 时如何正确转义参数?

调用 cygwin bash -c 时如何正确转义参数?

我正在尝试调用扫描图像命令(来自萨内工具)赛格威尽管我认为我的问题是一个一般的转义问题,所以也许我所说的并不重要。无论如何...

美中不足的是,我需要从 Windows 命令提示符调用上述命令(因此调用 bash.exe),但我无法弄清楚如何正确传递参数。以下是示例:

如果我跑上赛格威终端我可以运行这个命令,它运行良好:

 scanimage -d 'epson2:libusb:bus-0:\\.\libusb0-0001--0x04b8-0x012c' -y 20 --format tiff > out.tiff

很好,但是当我打开常规命令提示符并输入此命令(原始命令但在 -c“”位内)时:

"c:\cygwin\bin\bash.exe" --login -c "scanimage -d 'epson2:libusb:bus-0:\\.\libusb0-0001--0x04b8-0x012c' -y 20 --format tiff > out.tiff"

我收到此错误:

scanimage:打开设备 epson2:libusb:bus-0:.\libusb0-0001--0x04b8-0x012c 失败:参数无效

对我来说这似乎真的很奇怪,因为它描述错误中的参数的方式看起来好像它已经得到了正确的值(如果它没有正确传递它我会期望它是''或其他东西,但也许这只是我)。

顺便说一句,如果我放弃 -d 参数并这样做

"c:\cygwin\bin\bash.exe" --login -c "scanimage -y 20 --format tiff > out.tiff"

一切都很好 - 当然,如果我连接另一个扫描仪,则有 50/50 的机会扫描错误的扫描仪,因此省略该参数并不是一个真正的选择。

我想到了一个办法:使用命令创建一个 bsh 文件,然后从 bash.exe 启动该文件(“c:\cygwin\bin\bash.exe”--login scan.bsh,其中 scan.bsh 包含上述命令)但这似乎有点令人厌恶。

所以我的问题是,如何构建 bash.exe 的命令行,以便在这种情况下正确传递设备参数并且扫描仪扫描我的东西?

答案1

您需要\使用额外的 来转义所传递命令中的每个字符\

"c:\cygwin\bin\bash.exe" --login -c "scanimage -d 'epson2:libusb:bus-0:\\\\.\\libusb0-0001--0x04b8-0x012c' -y 20 --format tiff > out.tiff"

相关内容