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

Env*_*nvy 12 bash shell windows-10 windows-subsystem-for-linux windows-10-v1607

我已经为 Windows 10 安装了 Linux 子系统。它工作正常,但我想更改子系统的默认 shell 环境。

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

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

Mik*_*ail 12

秋季创作者更新以来,您可以使用chsh设置默认外壳。如果您使用bash.exe命令运行 WSL,这仍然不起作用,但如果您使用命令运行 WSL,这将起作用ubuntu.exe

此外,自 Fall Creators Update 以来,我们应该从Windows Store安装 WSL OS 。

设置zsh为默认外壳:

chsh -s /bin/zsh
Run Code Online (Sandbox Code Playgroud)

然后ubuntu.exe从命令提示符运行(或重新启动)。


Sam*_*nen 8

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

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

%systemroot%\system32\bash -c /usr/bin/fish
Run Code Online (Sandbox Code Playgroud)

这样,您将立即运行鱼。


mpe*_*pen 6

打开 bash,运行nano ~/.bashrc并将其粘贴到:

if [[ -t 1 && -x /usr/bin/zsh ]]; then
    exec /usr/bin/zsh
fi
Run Code Online (Sandbox Code Playgroud)

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

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

C:\Users\<USERNAME>\AppData\Local\lxss\home\<USERNAME>\.bashrc
Run Code Online (Sandbox Code Playgroud)

-t认为,检查是否stdout是开放的。不知道为什么这很重要,我从这篇文章中复制了它。