D
Estou enfrentando um problema em ls (1) que tenho quase certeza de que é uma coisa boba que estou deixando passar. De qualquer forma, não consigo entender realmente por que isso não está funcionando.
Estou usando bash para cygwin (não pergunte por que ... eu só tenho que :()
Aqui está a saída de versão completa (significativa):
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
Eu estava brincando com cygpath para converter os caminhos unix / windows para mim, para que eu possa ficar a maior parte do tempo no terminal e ainda assim conseguir os caminhos das janelas e vice-versa.
Até agora, tudo bem ... mas uma coisa chata no NT é que muitos caminhos têm espaços e outros caracteres que não se encaixam bem nos caminhos, como ( )
. Para me ajudar com isso, eu acabei de escrever um script oneliner para escapar de todos os caminhos com barras invertidas, então eu terei um caminho válido, não importa o que as janelas loucas colocam neles.
Até agora, ainda é tão bom ... Mas aí eu me deparei com um problema que o ls (1) fica confuso sobre os caminhos, é meio difícil de explicar então vai colocar alguns exemplos!
## Lets imagine that I want to get the "unix" version of C:\Program Files (x86)
## And for sake of simplicty I'll call the oneliner sript as unix_path.
unix_path "C:\Program Files (x86)"
## prints /cygdrive/c/Program\ Files\ \(x86\)
my_path=$(unix_path "C:\Program Files (x86)");
echo $my_path;
## prints /cygdrive/c/Program\ Files\ \(x86\)
## Until now, we're good!
## But the next commands really bugs me...
ls $my_path;
## ls: cannot access '/cygdrive/c/Program\': No such file or directory
## ls: cannot access 'Files\': No such file or directory
## ls: cannot access '\(x86\)': No such file or directory
ls $(unix_path "C:\Program Files (x86)")
## Same as before...
## ls: cannot access '/cygdrive/c/Program\': No such file or directory
## ls: cannot access 'Files\': No such file or directory
## ls: cannot access '\(x86\)': No such file or directory
ls "$my_path";
## ls: cannot access '/cygdrive/c/Program\ Files\ \(x86\)': No such file or directory
## Now is very crazy, let's imagine that I type /cygdrive/c/Program\ Files\ \(x86\)
## by hand or just paste it.
ls /cygdrive/c/Program\ Files\ \(x86\)
## I'll not post but the listing are correct!
Eu realmente não entendo porque o ls (1) não está correto quando eu o chamo com $()
ou com o $var_name_here
, mas ainda está correto quando eu digito o caminho.
Observe que o caminho é idêntico para os dois lados!
Qualquer ajuda aqui seria ótima!
Obrigado!