Como posso obter caminhos semelhantes ao Unix trabalhando no Bash no Windows?

2

Para quem não está familiarizado com msys2 , é uma porta de programas * nix para o Windows. Lá eu poderia fazer coisas como:

$ some-prog ~/.profile
$ some-prog /c/Windows/System32/drivers/etc/hosts

some-prog poderia ser qualquer binário, independentemente de serem programas ou programas gerais do Windows compilados com compiladores no msys2. Os caminhos seriam transparentemente traduzidos, dando assim uma vibe muito nix-ish mesmo quando se trabalha com programas que não fazem parte da msys2.

Atualmente, estou verificando o WSL / "Bash on Windows" (Atualização de criadores de conteúdo) e parece que tenho um problema.

Para um programa Linux, tudo funciona bem:

~ $ nano ~/.

Como esperado, o nano é aberto com o conteúdo de ~/.profile .

Ao tentar invocar um programa do Windows, existe um erro:

~ $ "/mnt/c/Program Files/Sublime Text 3/subl.exe" ~/.profile
Unable to translate current working directory. Using C:\Users\Admin

E abre C:\home\<wsl_username>\.profile no Sublime Text, enquanto o arquivo real deve ser %localappdata%\lxss\home\<wsl_username>\.profile .

Os caminhos do Windows não são melhores:

~ $ "/mnt/c/Program Files/Sublime Text 3/subl.exe" /mnt/c/Windows/System32/drivers/etc/hosts
Unable to translate current working directory. Using C:\Users\Admin

Isso abre C:\mnt\c\Windows\System32\drivers\etc\hosts , que é novamente o caminho errado.

Existe uma maneira de ter uma integração de caminho correta, semelhante à msys2, no WSL?

    
por user2064000 18.04.2017 / 09:51

1 resposta

1

Você precisa de algo como cygpath do Cygwin, infelizmente ainda não há uma porta para o WSL ... Então você pode simplesmente executar:

cd /
notepad.exe $(cygpath /etc/hosts)

Por enquanto, o substituto mais próximo de cygpath no momento é um pequeno programa postado no redit chamado win2lin.exe .

Para outra referência, você pode ver o script de shell que o Atom (o editor de texto) acabou de incluir em sua versão mais recente, atom.sh .

Ou se você quiser usar o nodejs e não se importar em codificar seu nome de usuário, escreva:

var p = require("path")
var path = "C:\Users\me\Desktop"
var sepa = path.split(p.win32.sep)
var newS = [].concat([sepa[0].toLowerCase()], sepa.slice(1))
var newP = "/mnt/" + p.posix.join.apply(p.posix, newS).replace(":", "")
// newP == "/mnt/c/Users/me/Desktop

Por enquanto, a solução mais fácil é garantir que o binário do Windows que você deseja usar esteja em seu caminho (você pode até usar um link simbólico para o .exe para manter seu caminho limpo) e depois cd para / mnt / c / PathToFileYouWantToEdit, em seguida, execute seu programa como: atom.exe myExampleFile .

cd /mnt/c/Some/Path
notepad.exe SomeFile

Se o seu objetivo é editar arquivos que estão dentro do WSL mas não acessíveis externamente (tudo fora do / mnt do WSL), a maneira mais fácil é instalar um servidor WebDAV dentro do WSL permitindo acesso r / w a / e mapear esse Servidor WebDAV para uma letra de unidade do Windows.

    
por 26.04.2017 / 03:58