Estou seguindo este post:
http://blog.dotsmart.net/2011/01/27/executing-cygwin-bash-scripts-on-windows/
Eu preciso executar um arquivo em lotes com um argumento e passar esse argumento para um script bash. O argumento é um nome de arquivo longo com espaços, algo como FILE WITH SPACES.xlsx.
No Windows:
c> program.cmd "FILE WITH SPACES.xlsx"
# O Windows adiciona as cotações para completar o nome do arquivo.
O script em lote deve passar o nome do arquivo "FILE WITH SPACES.xlsx" para um script .sh, algo assim:
# program.sh "FILE WITH SPACES.xlsx"
Aqui está o problema, o arquivo é passado sem as aspas:
# program.sh FILE WITH SPACES.xlsx
O script program.sh tem:
#!/bin/sh
anyprogram "$1"
As citações não são passadas e o programa anyprogram
não localiza o arquivo FILE WITH SPACES.xlsx.
Eu tentei escapar do "com mas não funciona:
#!/bin/sh
anyprogram ""$1""
Também com:
#!/bin/sh
anyprogram ""$1""
Nenhum parece funcionar, alguma sugestão?
Respostas:
0 para resposta № 1Arquivos em lote podem ser complicados com a maneira como eles manipulam aspas duplas, e adicionar variáveis Bash pode tornar as coisas ainda mais complicadas. Aqui está uma solução que acredito que resolve seu problema específico:
Localização do arquivo em lote: C: UsersJameyDesktopblah.bat
Conteúdo do arquivo em lote:
@ECHO OFF
ECHO I AM A BATCH FILE.
CD C:UsersJameyDesktop
ECHO TESTING > %1
TYPE %1
ECHO.
SET scriptpath=/cygdrive/c/users/jamey/desktop
C:cygwin64binbash.exe -c "$scriptpath/program.sh "%1""
Local do script bash: C: UsersJameyDesktopprogram.sh
Conteúdo do script Bash:
#!/bin/bash
echo "I AM A BASH SCRIPT."
echo "A WINDOWS BATCH FILE TOLD ME TO SAY THIS: $1"
echo
ls -l "$1"
echo
cat "$1"
echo
rm -v "$1"
Aqui está a saída cmd.exe da execução blah.bat "FILE NAME WITH SPACES.txt":
C:UsersJameyDesktop>blah.bat "FILE NAME WITH SPACES.txt"
I AM A BATCH FILE.
TESTING
I AM A BASH SCRIPT.
A WINDOWS BATCH FILE TOLD ME TO SAY THIS: FILE NAME WITH SPACES.txt
-rwxrwx---+ 1 Jamey None 10 Sep 24 09:05 FILE NAME WITH SPACES.txt
TESTING
removed "FILE NAME WITH SPACES.txt"
Como alternativa, se você substituir "rm -v" por "cygstart", "FILE NAME WITH SPACES.txt" será aberto no Bloco de Notas. O mesmo vale para o Excel com extensões .xlsx. Espero que isso responda sua pergunta!