我正在尝试在 Ubuntu WSL 中创建以下别名:
alias windocs='cd /mnt/c/Users/Firstname L'astname/Documents/'
不幸的是我的用户名是名字 姓氏,包括空格和撇号。
我尝试过使用反斜杠:
alias windocs='cd /mnt/c/Users/Firstname\ L\'astname/Documents/'
但 bash 仍然将撇号解释为字符串的结尾,从而导致以下错误:
-bash: .bash_aliases: line 11: unexpected EOF while looking for matching `''
-bash: .bash_aliases: line 12: syntax error: unexpected end of file
我还尝试将用户名封装在双引号中:
alias windocs='cd /mnt/c/Users/"Firstname L'astname"/Documents/'
我得到同样的错误。
我该如何编写这个别名才能使其正常工作?每次都必须一路 cd 到 Documents 文件夹,这很痛苦。
答案1
单引号字符串中的单引号是不可转义的,但幸运的是,您可以在别名定义周围使用双引号,然后在目录名称周围使用(转义的)双引号:
alias windocs="cd \"/mnt/c/Users/Firstname L'astname/Documents/\""
或者,您可以将该目录符号链接到您的 Linux 主目录中:
ln -s "/mnt/c/Users/Firstname L'astname/Documents/" ~/docs
然后,简单地cd docs
(或者cd ~/docs
,如果您不在您的主目录中)将带您到那里。
答案2
嗯,我应该先查一下这个。我按照这个 stackoverflow 将整个字符串放在双引号中回答:
alias windocs="cd /mnt/c/Users/Firstname\ L\'astname/Documents/"
现在可以了。这是因为单引号字符串没有转义机制,但双引号字符串有转义机制(根据其他答案)。
答案3
仅适用于 Linux 的 Windows 子系统 (WSL),Windows端环境变量可以映射到$WSLENV
WSL端的环境变量。例如/mnt/c/Users/username/
Windows端保存为%USERPROFILE%
环境变量。
为此,首先在 Windows 中添加变量,方法是在命令提示符中以管理员身份运行此命令
setx WSLENV USERPROFILE
.bashrc
然后在(或类似文件)中添加别名。例如,
alias windocs='cd $(wslpath $USERPROFILE/Documents)'
这里wslpath
将 Windows 样式路径(反斜杠)转换为 *NIX 样式路径(正斜杠)。在示意图中,
Windows <---> WSL
C:\Users\username <---> /mnt/c/Users/username
USERPROFILE <---> WSLENV
读在 WSL 和 Windows 之间共享环境变量博客以获取更多信息。