Windows 10 Bash do Ubuntu: Aliases não funcionando (: comando não encontrado)

1

Eu iniciei o Ubuntu bash no Windows que foi lançado com o Anniversary Update 1607. Este bash fornece o arquivo .bashrc localizado em /home/phil , que é o diretório home do usuário Unix, não o usuário do Windows (isso seria %código%). Neste arquivo, entre outras coisas, está o seguinte trecho de código:

if [ -f .bash_aliases ]; then
    . .bash_aliases
fi

Como eu já tenho um arquivo de aliases no meu diretório pessoal do Windows, substituí-lo por:

if [ -f /mnt/c/Users/Philipp/.aliases_win ]; then
     . /mnt/c/Users/Philipp/.aliases_win
fi

Quando ao reiniciar o bash ou o sourcing diretamente com /mnt/c/Users/Philipp , é fornecido:

: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found

Então, removi muitos aliases até que essas mensagens de erro desaparecessem, deixando apenas esses aliases no arquivo:

(Para referência, o arquivo completo se parece com isto: link )

# Quickly navigate up the *great hollow*
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'

Mas ao usar:

phil@RAUMSTATION:~$ ..
: File or directory not found

No entanto, quando eu faço source /mnt/c/Users/Philipp/.aliases_win diretamente do bash, funciona bem.

Agora estou totalmente confuso. O que estou fazendo de errado? O arquivo aliases funciona bem na minha instalação do Ubuntu e também com coisas como o Git Bash.

Editar: colocar meus aliases em alias ..='cd ..' funciona, não tanto ao fazer o sourcing do arquivo do diretório inicial dos meus usuários do Windows.

    
por kleinfreund 04.08.2016 / 09:39

1 resposta

3

Você precisa converter os finais de linha de /mnt/c/Users/Philipp/.aliases_win do formato Windows (CRLF) para o formato unix (LF). Você pode fazer isso com o sed (isso sobrescreverá o arquivo):

sed -i 's/\r$//' /mnt/c/Users/Philipp/.aliases_win

Explicação:

O motivo pelo qual bash diz : command not found é porque ele interpreta o retorno de carro nas linhas "em branco" no arquivo formatado no windows como o nome de um comando. Você pode testar isso por si mesmo no bash shell digitando CTRL-V, CTRL-M e, em seguida, pressionando enter (CTRL-M ou ^ M corresponde a um retorno de carro, veja man console_codes ).

Depois de remover todas as linhas em branco, você ficou com apenas alguns comandos alias, que lhe deram : File or directory not found após a execução dos aliases porque o retorno de carro no final das linhas de alias foi realmente adicionado ao alias. Por exemplo, a linha alias ..='cd ..'<CR><LF> fez .. um alias para cd ..<CR> , que não vai para a pasta pai .. , mas tenta alterar para o diretório com o nome ..<CR> . A mensagem de erro ao executar esse alias não é iniciada com o típico bash: cd: foldername , pois o eco do retorno de carro no nome da pasta faz com que o cursor retorne ao início da linha; tente algo como echo aaaa<CR>bb para ver isso com mais clareza.

    
por 11.08.2016 / 01:14