当用户名包含空格和撇号时,如何在 Ubunth WSL 上创建 bash 别名

当用户名包含空格和撇号时,如何在 Ubunth WSL 上创建 bash 别名

我正在尝试在 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端环境变量可以映射到$WSLENVWSL端的环境变量。例如/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 之间共享环境变量博客以获取更多信息。

相关内容