WSL 隐藏 /mnt/c/Users/
Posted
技术标签:
【中文标题】WSL 隐藏 /mnt/c/Users/【英文标题】:WSL hide /mnt/c/Users/ 【发布时间】:2018-10-09 14:15:11 【问题描述】:可以使用 WSL (Ubuntu) 在我的终端(VS Code 和 Hyper)中查看更短的路径。在 Ubuntu 之上,我安装了 zsh。目前,我正在使用 git bash 和路径看起来 Lukas@Y50-70 ~/Coding
但在 Ubuntu 中,我有类似 lukas@Y50-70 /mnt/c/Users/Lukas/Coding
的东西。当我在另外 2 个左右的文件夹中有一个项目并且我的分支名称很长时,有一整行不必要的信息(对我来说)很烦人。
这是 Ubuntu 和 git bash 的比较:
谢谢
【问题讨论】:
【参考方案1】:我能够使用命名目录来解决这个问题 - 通过将此行添加到您的 ~/.zshrc 文件中
hash -d c=/mnt/c
您会在提示符中看到“~c/”,而不是“/mnt/c/”,我认为这更好。
这与为目录设置别名的效果相似,但名称会反映在路径的显示方式中。
作为额外的奖励,您可以随时通过键入 ~c
切换到该目录
【讨论】:
【参考方案2】:检查zsh installation guide under WSL 是否有帮助(来自neurogenesis):
安装
zsh
和sudo apt-get install zsh
bash.exe
是 WSL / linux 子系统的入口点。您必须修改 Windows 快捷方式以指定bash -c --login
或将~/.bashrc
修改为exec /bin/zsh
以正确加载不同的 shell。不咨询/etc/passwd
,因为它不是一个完整的登录过程。一定要设置你的SHELL
env var。详情请见#846。 在开始安装之前修复您的umask
,否则像 zsh 这样的工具会报错。 具体来说,“group
”和“other
”权限将拥有与所有者相同的权限。这会导致 zsh 的compaudit
和compinit
失败(两者都与命令完成有关)。 有关详细信息,请参阅#352。umask 022
可以添加到您的~/.bashrc
。注意:这应该在尝试安装
zsh
插件管理器(如antigen
)之前完成(否则 git 克隆会出现目录/文件权限问题)。 您也应该在安装 RVM 或 rbenv 之前执行此操作。我最终在
~/.bashrc
的顶部插入了几行,如下所示:
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
## Fix missing umask value
umask 022
## Launch Zsh
if [ -t 1 ]; then
cd $HOME
export SHELL=/bin/zsh
exec -cl $SHELL
fi
Issue 846(第 2 点提到)包括the comment:
一个正常的
-c zsh
符号链接在我错误的目录中打开,但我设法使用它(注意波浪号):
C:\Windows\System32\bash.exe ~ -c /bin/zsh
另见“How to Use Zsh (or Another Shell) in Windows 10”。
【讨论】:
我不明白这是如何回答这个问题的,但也许我的阅读方式与你的不同。我认为问题是关于PS1
包括完整的当前目录路径。
@hvd 完全正确:我希望通过这些设置,$HOME 将被识别为 ~。
但默认的$HOME
不是/mnt/c/Users/...
。 OP 不在 $HOME
的子目录中。
这是个坏主意,因为/mnt/c/...
没有 POSIX 语义。这可能会破坏在$HOME
中存储某些类型文件的程序。
@hvd 同意。我会等待 OP 的反馈以了解更多信息。【参考方案3】:
我知道这并不是您所希望的解决方法。我正在寻找解决同样的问题。提示太长了,导致我的一些命令换行到下一行。在看到有关 VonC 答案的 cmets 后,我决定保留下一个最佳解决方案。
我在 ~/.bashrc 文件中所做的是:
if [ "$color_prompt" = yes ]; then
PS1='$debian_chroot:+($debian_chroot)\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\n\$ '
else
PS1='$debian_chroot:+($debian_chroot)\u@\h:\w\n\$ '
fi
我在\$
之前添加了一个\n
所以当我在我的 Windows 主文件夹中时,它看起来像这样
ryan@DESKTOP-RSKAA4F:/mnt/c/Users/ryank
$
然后我开始在$
之后输入我的命令。它占用了更多的垂直空间,但至少我不必为了避免文本换行而最大化我的终端窗口。
【讨论】:
【参考方案4】:在我看来,在启动终端会话后仅运行“cd”,就会将提示重新定位为正常的“/home/(user)”
应该不需要安装 zsh 或其他任何东西。无论如何它对我有用。
在从 Windows 的根文件夹启动会话时,似乎也能解决问题。
我的会话保持在下面
C:\vms
样本:
cd -d C:\vms\minikube\ubu_jenkinsX\rootfs
C:\vms\minikube\ubu_jenkinsX\rootfs>wsl -d ubu_jenkinsX
您的数据可能位于本地数据中您的用户资料下。搜索 rootfs 文件夹
【讨论】:
【参考方案5】:您的 WSL 提示显示如此长的路径的原因是您实际上不在您的主目录中。你看,WSL 有自己独立于 Windows 的虚拟文件系统,并且 Windows 路径(如你的C:\Users\Lukas\...
)存储在/mnt/c/Users/Lukas/...
下。您的 WSL 主目录将是 /home/Lukas
(因为您的 WSL 用户名是大写的),但当然,这不是您的项目所在的位置。
fish
shell 有一个prompt_pwd
函数,可以缩短到类似这样的路径:
0 ---- /m/c/U/L/Documents cd Something
0 ---- /m/c/U/L/D/Something prompt_pwd
/m/c/U/L/D/Something
这是你感兴趣的东西吗?您可以将the function 移植到 Bash,或者只切换到 Fish,或者只显示当前目录名称而不是路径。
【讨论】:
以上是关于WSL 隐藏 /mnt/c/Users/的主要内容,如果未能解决你的问题,请参考以下文章