Я пытаюсь вызвать команду scanimage (из инструмента SANE ) изнутри cygwin, хотя я думаю, что моя проблема связана с общим побегом, поэтому, возможно, то, что я вызываю, не имеет значения. Тем не мение...

Мазь в том, что мне нужно вызвать указанную команду из командной строки Windows (так называемый bash.exe), и я не могу понять, как правильно передать аргументы. Вот пример:

Если я запускаю терминал cygwin, я могу запустить эту команду, и она прекрасно работает:

 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-файл с помощью команды in, а затем просто запустить этот файл из bash.exe ("c:\cygwin\bin\bash.exe" --login scan.bsh, где scan.bsh содержит вышеупомянутую команду) но это, кажется, немного неприглядно.

Поэтому мой вопрос заключается в том, как я могу создать командную строку для bash.exe таким образом, чтобы в этом случае аргумент устройства был правильно передан, и сканер сканировал мои данные?

1 ответ1

2

Вам нужно будет экранировать каждую \ в команде, которую вы передаете с дополнительным \ .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .