如何更改 Windows 的 Linux 子系统的默认 shell

如何更改 Windows 的 Linux 子系统的默认 shell

我已经为 Windows 10 安装了 Linux 子系统。它运行良好,但我想更改子系统的默认 shell 环境。

我照做了sudo apt-get install fish,然后chsh -s /usr/bin/fish。但是当我bash.exe在 Windows 中启动时,它总是启动 bash(我认为这是可以预测的)。

有人知道改变这种行为的论据吗?

答案1

由于 Linux 子系统是通过驻留在系统目录中的 bash.exe 启动的,因此您无法更改默认 shell 本身。

但是,您可以创建一个新的快捷方式,就像 bash 中已经存在的快捷方式一样,并使其运行命令

%systemroot%\system32\bash -c /usr/bin/fish

这样你就可以立即捕鱼了。

答案2

最初提出这个问题时,bash.exe被用来启动 WSL。但是,现在 WSL 文档中将此命令列为“已弃用”。如果尝试通过已弃用的bash.exe, 命令启动,则 shell 将始终(自然)为 Bash。此处的其他答案(例如通过 运行不同的 shell ~/.bashrc)或使用 运行bash -c都可以使用,但它们效率较低,不再推荐。

启动 WSL 的替换命令现在是wsl.exe,并且自 Windows 10 Fall Creators Update 以来,您可以使用“普通”Linuxchsh为您的用户设置默认 shell。

例如,设置zsh为默认 shell:

chsh -s /bin/zsh

然后退出现有的shell并wsl.exe从命令提示符运行(或重新启动)。

/etc/passwd请注意,这与其他一些答案中的直接编辑具有相同的效果(但更安全) 。

答案3

打开 bash,运行nano ~/.bashrc并粘贴以下内容:

if [[ -t 1 && -x /usr/bin/zsh ]]; then
    exec /usr/bin/zsh
fi

只需将 shell 更改为fish或任何您想要的。-x如果您重新安装 Bash,则检查很重要——全新安装后您将无法打开它,因为命令exec将失败,然后 Bash 将关闭。

如果发生这种情况,请.bashrc在此处删除/重命名您的文件:

C:\Users\<USERNAME>\AppData\Local\lxss\home\<USERNAME>\.bashrc

-t相信检查 stdout 是否打开。不确定为什么这很重要,我从本文

答案4

我刚刚编辑了 /etc/passwd。将我的用户的默认 shell 设置为 zsh。运行正常,没有问题。

vvasch:x:1000:1000:,,,:/home/vvasch:/bin/zsh

相关内容