/ / passar argumento de arquivo longo do script em lote para o script bash nas janelas com cygwin - windows, bash, shell, arquivo em lote, cygwin

passar argumento de arquivo longo do script em lote para o script bash nas janelas com cygwin - windows, bash, shell, arquivo em lote, cygwin

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 № 1

Arquivos 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!