我已经为 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