Windows 10 Ubuntu Bash:别名不起作用(:找不到命令)

kle*_*und 3 bash bash-alias windows-subsystem-for-linux windows-10-v1607

我在 Windows 上启动了 Ubuntu bash,它随周年更新 1607 一起提供。这个 bash 源.bashrc文件位于/home/philUnix 用户的主目录,而不是 Windows 用户(这将是/mnt/c/Users/Philipp)。在这个文件中还有以下一段代码:

if [ -f .bash_aliases ]; then
    . .bash_aliases
fi
Run Code Online (Sandbox Code Playgroud)

由于我的 Windows 主目录中已经有一个别名文件,因此我将其替换为:

if [ -f /mnt/c/Users/Philipp/.aliases_win ]; then
     . /mnt/c/Users/Philipp/.aliases_win
fi
Run Code Online (Sandbox Code Playgroud)

当重新启动 bash 或直接使用时,source /mnt/c/Users/Philipp/.aliases_win会给出:

: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
Run Code Online (Sandbox Code Playgroud)

所以我删除了尽可能多的别名,直到这些错误消息消失,只在文件中留下这些别名:

(作为参考,完整文件如下所示:https : //github.com/kleinfreund/dotfiles/blob/master/win/bash/.aliases

# Quickly navigate up the *great hollow*
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
Run Code Online (Sandbox Code Playgroud)

但是在使用时:

phil@RAUMSTATION:~$ ..
: File or directory not found
Run Code Online (Sandbox Code Playgroud)

但是,当我alias ..='cd ..'直接从 bash 中执行操作时,它运行良好。

我现在完全糊涂了。我究竟做错了什么?aliases 文件在我的 Ubuntu 安装上运行良好,也适用于 Git Bash 之类的东西。

编辑:将我的别名投入/home/phil/.bashrc工作,而不是从我的 Windows 用户的主目录中获取文件时。

小智 5

您需要将行尾/mnt/c/Users/Philipp/.aliases_win从 windows 格式 (CRLF) 转换为 unix 格式 (LF)。您可以使用 sed 执行此操作(这将覆盖文件):

sed -i 's/\r$//' /mnt/c/Users/Philipp/.aliases_win
Run Code Online (Sandbox Code Playgroud)

解释:

bash 说的原因: command not found是因为它将 Windows 格式文件中“空白”行上的回车解释为命令的名称。您可以在 bash shell 中通过键入 CTRL-V、CTRL-M 然后按回车键(CTRL-M 或 ^M 对应于回车,请参阅man console_codes)来亲自测试这一点。

删除所有空行后,只剩下几个别名命令,这些命令: File or directory not found在执行别名后为您提供,因为别名行末尾的回车实际上已添加到别名中。例如,该行为alias ..='cd ..'<CR><LF>制作了..一个别名cd ..<CR>,它不会转到父文件夹..,而是尝试更改为名称为 的目录..<CR>。运行此别名时的错误信息不是以典型开头的,bash: cd: foldername因为在文件夹名称中回显回车会导致光标返回到行首;尝试echo aaaa<CR>bb更清楚地看到这一点。