如何在 WSL/Ubuntu/Bash 中使用两个波形符“~~”(或类似字符)创建路径的快捷方式?

如何在 WSL/Ubuntu/Bash 中使用两个波形符“~~”(或类似字符)创建路径的快捷方式?

我是 Ubuntu/Linux 世界的新手,所以不要对我太苛刻。

我在 Windows 上使用带有 WSL2 和 bash shell 的 Ubuntu。有时我想将文件从 Windows 复制到 Ubuntu 或反之。我在网上找到了一些关于如何执行此操作的教程,最简单的方法是导航到/mnt/c/Users/<your_user>.

我想创建一个像波浪号这样的变量~,它表示我的 Windows 用户的主目录。我考虑使用双波浪号,~~因为我看到它不是保留的或其他什么。

/bin我在命名中创建了一个可执行文件~~,这将是echo必要的路径。但这样使用起来很麻烦。

有没有办法创建像这样的特殊角色~?如果没有,有更好的方法吗?

我想要的最终结果是能够做类似的事情:

cp ~~/Desktop/somefile.txt ~/somefile.txt

答案1

对于您的情况,您可以使用 shell 变量来代替。您可以将其称为$WHeg,它仍然相当短:

~$ export WH=/mnt/c/Users/your_user

这会将变量设置WH为您的 Windows 主目录并将其导出为环境变量。然后您可以使用该变量,如下所示

~$ cp $WH/Desktop/somefile.txt ~/somefile.txt

要使此设置永久存在,您可以将此变量规范添加到您的.bashrc文件中。

笔记如果 Windows 主目录的路径包含空格,则必须在变量定义和以后的任何使用中引用该路径:

export WH="/mnt/c/Users/your user"

在你.bashrc

~$ cp "$WH"/Desktop/somefile.txt ~/somefile.txt

在控制台上使用时。

答案2

我在 WSL 下的解决方案是在我的主目录中创建一个指向我的 Windows 配置文件的符号链接。我个人使用:

ln -s /mnt/c/Users/<username> ~/winhome

但你可以缩短它。下bash,至少~~ 出现也可以用作符号链接名称,但我担心在某些情况下它可能会被误解。如果你想尝试这条路线:

ln -s /mnt/c/Users/<username> ~/~~

然后访问它就变成了这样:

cp ~/myfile ~/~~/Documents/

答案3

我知道问题已标记bash,但如果您使用zsh,您可以这样做:

hash -d w='/mnt/c/Users/<your_user>'

这样,~w就会扩展到那条路。这是一个“静态命名目录”。这就像 AdminBee 使用变量扩展的建议,但一个区别是制表符补全适用于扩展~w/.另外,如果您位于该目录下并且提示设置为显示当前目录,它将显示带有指定目录的简短版本,而不是扩展的完整路径。

~是此功能的无效字符,因此~~无法使用。

答案4

另外,对于@JoL 的答案中适用于大多数 shell(至少是 Bash、Fish、Zsh,甚至 Dash)的方法,您可以简单地创建一个新用户,并w以指向您的 Windows 用户配置文件的主目录命名。然后~w/就变成了捷径。它似乎也可以用于~用户名,从而产生~~快捷方式。详情请参阅下文。

在 WSL 上为此目的创建用户实际上没有任何缺点,因为没有用户级安全性的概念(即wsl -u root已经允许您在没有密码的情况下完全访问 WSL 实例中的所有内容)。

一个简单的 ...

sudo useradd --home-dir /mnt/c/Users/<username> w

...将为 WSL 工作。然而,“最佳实践”可能更像是:

sudo useradd --no-user-group --non-unique -u 1000 -g 1000 --shell /sbin/nologin -f0 -e0 --home-dir /mnt/c/Users/<username> w

这将创建一个w与主 WSL 用户具有相同用户 ID 和组 ID (1000:1000) 的用户(这只是我个人的偏好,以避免不必要的 uids/gids 污染系统)。该用户将拥有 nologin shell、过期的密码和锁定的帐户。再说一次,无论如何,WSL 并不是真正需要这种额外的“安全性”。

与 JoL 的答案一样,这将允许:

cp ~/myfile ~w/Documents/

需要注意的是,这可能会在某些极端情况下导致问题,您可以使用useradd--badname选项强制它接受~作为用户名:

sudo useradd --badname --home-dir /mnt/c/Users/<username> "~" # or ...
sudo useradd --badname --no-user-group --non-unique -u 1000 -g 1000 --shell /sbin/nologin -f0 -e0 --home-dir /mnt/c/Users/<username> "~"

导致您最初的请求:

cp ~/myfile ~~/Documents

相关内容