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):

    安装zshsudo 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 的 compauditcompinit 失败(两者都与命令完成有关)。 有关详细信息,请参阅#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/的主要内容,如果未能解决你的问题,请参考以下文章

Windows10 Linux子系统安装/迁移到非系统盘

在WSL中使用code .启动VSCode失败解决方法

无法从 WSL bash 中的批处理文件运行 Homebrew 应用程序(找不到命令)

感性理解编译优化

css div 隐藏网站内容

layui表格的表头怎么隐藏,内容可以隐藏,但是表头却还在