Windows 10 Ubuntu Bash: Aliase funktionieren nicht (: Befehl nicht gefunden)

4777
kleinfreund

Ich habe die Ubuntu-Bash unter Windows gestartet, die mit dem Anniversary Update 1607 ausgeliefert wurde. Diese Bash- .bashrcDatei bezieht sich auf /home/phildie Datei, in der sich das Home-Verzeichnis des Unix-Benutzers befindet, nicht der Windows-Benutzer (dies wäre der Fall /mnt/c/Users/Philipp). In dieser Datei befindet sich unter anderem der folgende Code:

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

Da ich bereits eine Aliase-Datei in meinem Windows-Basisverzeichnis habe, habe ich dieses Stück ersetzt durch:

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

Was beim Neustart von bash oder beim Sourcing direkt mit source /mnt/c/Users/Philipp/.aliases_winergibt:

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

Also entfernte ich so viele Aliase, bis diese Fehlermeldungen verschwanden, wobei nur diese Aliase in der Datei belassen wurden:

(Die Referenzdatei sieht wie folgt aus: https://github.com/kleinfreund/dotfiles/blob/master/win/bash/.aliases )

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

Aber bei der Verwendung:

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

Wenn ich jedoch alias ..='cd ..'direkt von bash aus arbeite, funktioniert es gut.

Ich bin jetzt völlig verwirrt. Was mache ich falsch? Die Aliase-Datei funktioniert gut mit meiner Ubuntu-Installation und auch mit Dingen wie Git Bash.

Bearbeiten: Meine Aliase in /home/phil/.bashrcWerken einbauen, nicht so sehr beim Laden der Datei aus dem Home-Verzeichnis meines Windows-Benutzers.

1

1 Antwort auf die Frage

3
Josh Brobst

Sie müssen die Zeilenenden des /mnt/c/Users/Philipp/.aliases_winWindows-Formats (CRLF) in das Unix-Format (LF) konvertieren. Sie können dies mit sed tun (dadurch wird die Datei überschrieben):

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

Erläuterung:

Der Grund, aus dem bash sagt, : command not foundist, dass er den Wagenrücklauf in den "leeren" Zeilen in Ihrer Windows-formatierten Datei als Namen eines Befehls interpretiert. Sie können dies in der Bash-Shell selbst testen, indem Sie STRG-V, STRG-M eingeben und dann die Eingabetaste drücken (STRG-M oder ^ M entspricht einem Wagenrücklauf, siehe man console_codes).

Nachdem Sie alle leeren Zeilen entfernt hatten, blieben nur noch einige Aliasbefehle, die Sie : File or directory not foundnach der Ausführung der Aliasnamen erhalten haben, da der Wagenrücklauf am Ende der Aliaszeilen tatsächlich in den Alias ​​eingefügt wurde. Zum Beispiel kann die Leitung alias ..='cd ..'<CR><LF>gemacht ..einen Alias für cd ..<CR>, die die übergeordneten Ordner nicht gehen, ..sondern versuchen, in das Verzeichnis mit dem Namen zu ändern ..<CR>. Die Fehlermeldung beim Ausführen dieses Aliasnamens beginnt nicht mit dem Typical, bash: cd: foldernameda der Cursor durch das Zurücksenden des Wagenrücklaufs im Ordnernamen an den Anfang der Zeile zurückkehrt. Versuchen Sie etwas echo aaaa<CR>bb, um dies klarer zu sehen.