kle*_*und 3 bash bash-alias windows-subsystem-for-linux windows-10-v1607
我在 Windows 上启动了 Ubuntu bash,它随周年更新 1607 一起提供。这个 bash 源.bashrc
文件位于/home/phil
Unix 用户的主目录,而不是 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
更清楚地看到这一点。
归档时间: |
|
查看次数: |
7645 次 |
最近记录: |