Como escapar os argumentos corretamente ao chamar cygwin bash -c?

0

Estou tentando chamar o comando scanimage (do SANE tool) de dentro cygwin embora eu ache que meu problema é um dos geral escapando então talvez o que eu estou chamando não importe. Enfim ...

A mosca na pomada é que eu preciso chamar o comando disse a partir de um prompt de comando do Windows (assim chamando bash.exe) e não posso descobrir como passar os argumentos corretamente. Aqui está um exemplo:

Se eu encontrar um terminal cygwin , posso executar este comando e ele funciona bem:

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

Ótimo, mas quando eu chamar um prompt de comando regular e colocar isso (o comando original, mas dentro do -c "" bit):

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

Eu recebo este erro:

scanimage: open of device epson2:libusb:bus-0:.\libusb0-0001--0x04b8-0x012c failed: Invalid argument

Isso parece muito estranho para mim, pois como ele está descrevendo o argumento no erro parece que ele tem o valor correto (se ele não tivesse passado corretamente, eu esperaria que fosse '' ou algo assim, mas talvez é só eu).

Aliás, se eu abandonar o argumento -d e fazer isso

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

está tudo bem - exceto, é claro, que se eu conectar outro scanner, eu tenho 50/50 de chance de escanear o errado, então omitir o argumento não é realmente uma opção.

Eu pensei em uma maneira de fazê-lo: criar um arquivo bsh com o comando e, em seguida, basta iniciar o arquivo do bash.exe ("c: \ cygwin \ bin \ bash.exe" --login scan .bsh onde scan.bsh contém o comando mencionado acima) mas isso parece, bem, um pouco nojento.

Portanto, a minha pergunta é, portanto, como posso construir a linha de comando para o bash.exe, de modo que, nesse caso, o argumento do dispositivo seja passado corretamente e o scanner varre minhas coisas?

    
por kmp 07.03.2013 / 08:19

1 resposta

2

Você precisará escapar a cada \ no comando que está passando com um \ extra.

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