-
Sempre cite suas variáveis para que você não precise se preocupar com espaços ou metacaracteres de shell.
-
você pode usar sed
ou tr
para converter /
s em \
. por exemplo. sed 's:/:\:g'
ou tr '/' '\'
(nota: porque \
é o caractere de escape do shell, ele precisa ser escapado para ser tratado como uma barra invertida literal).
-
Como alternativa, os operadores de manipulação de string do bash farão o trabalho (mas não são posix padrão, portanto não são portáteis). O único erro que você fez lá foi não citar as variáveis.
Mas note que, como mencionado por @Michael Homer, não deve ser necessário modificar o separador de caminho ... Eu certamente não tive nenhuma dificuldade em executar wine program.exe /unix/path/to/file
no passado.
resultando em:
#!/bin/bash
p1="$1"
p2="$2"
# optional transformation
p1="$(printf "%s" "$p1" | tr '/' '\')"
p2="$(printf "%s" "$p2" | tr '/' '\')"
wine /utils/wincmp.exe "$p1" "$p2"
ou
#!/bin/bash
p1="${1//\//\}"
p2="${2//\//\}"
wine /utils/wincmp.exe "$p1" "$p2"
ou até mesmo:
#!/bin/bash
wine /utils/wincmp.exe "${1//\//\}" "${2//\//\}"
(mas esta última versão não oferece a você qualquer oportunidade de checar os argumentos do arquivo ou fazer qualquer tipo de tratamento de opções - por exemplo, com getopts
)
Por fim, convém reconsiderar sua preferência por uma ferramenta de comparação do Windows ou pelo menos realizar uma pesquisa mais completa antes de decidir (você avaliou apenas um pequeno subconjunto de ferramentas disponíveis e wrappers de GUI). Uma ferramenta baseada em Windows / wine não se integrará agradavelmente ao fluxo de trabalho de desenvolvimento baseado em Linux / UNIX.
(pessoalmente, uso principalmente diff -u
ou colordiff -u
em less
. Como estou trabalhando com arquivos de texto, não há necessidade de uma interface GUI. Também é idêntico ao que recebo de git diff
etc. Nas raras ocasiões eu preciso de um diff lado-a-lado, eu uso principalmente sdiff
).