我是 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 变量来代替。您可以将其称为$WH
eg,它仍然相当短:
~$ 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