在 Ubuntu 18.04 上,我通过
chsh -s `which fish`
我已经安装了 Maillspring 和 Visual Studio Code 快照应用程序,它们安装得很好,最初可以从仪表板启动,但在登录和注销后,它们都不再出现在仪表板中。
在软件商店中搜索它们会显示已安装,我可以从那里启动它们。
为什么默认外壳对此很重要?
在 Ubuntu 18.04 上,我通过
chsh -s `which fish`
我已经安装了 Maillspring 和 Visual Studio Code 快照应用程序,它们安装得很好,最初可以从仪表板启动,但在登录和注销后,它们都不再出现在仪表板中。
在软件商店中搜索它们会显示已安装,我可以从那里启动它们。
为什么默认外壳对此很重要?
您最初在问题
chsh -s which bash
中使用的命令是您所说的错字,这导致您的问题产生了很大的混乱。即使它已经用 ` 符号正确形成,bash 如下所示。它会将外壳更改为
bash
(默认)。更改要fish
使用的外壳或者简单地使用命令
chsh
并输入要使用的 shell 的路径。见下文:有关鱼壳的更多信息,请参阅此。
编辑:关于快照包:默认外壳重要吗?答案是可能的,因为它取决于程序员所做的假设和所采用的方法。请参阅上一个链接中 bash 和 fish 如何处理事物的差异。例如,fish 没有隐式子shell,这可能会对期望类似于 bash 的行为的程序员在变量赋值中产生令人惊讶的副作用。这里有一个很好的例子来说明对隐式子shell 的期望。
为什么?为了澄清,似乎在fish和其他更常见的shell(如bash)之间对继承概念的处理方式不同。我的理解是,这可能会导致管道、循环和函数(所有这些都是常用的编程策略)的意外行为。
程序员也可能依赖shell 内置函数,这些函数可能不存在于 fish 中,或者可能以意想不到的方式实现。
资料来源:
man chsh
fish
在维基百科上Unix 和 Linux 上的子shell
SuperUser.com 上的相关帖子
似乎 Ubuntu 使用默认 shell 调用 snap 应用程序,并且似乎假设 shell 是 bash(或与 bash 兼容,如 zsh)。
我遇到了同样的问题(在 Ubuntu 18.10 上): 之后
chsh -s `which fish`
,即使添加/snap/bin
到$PATH
.我通过将默认 shell 设置为 Bash 解决了这个问题,而是更改了我的终端应用程序调用的(因为我主要通过终端模拟器使用我的 shell):
fish
。之后,启动 Gnome-Terminal(从 Gnome Shell 或使用Ctrl++ Alt)T将启动 Fish shell,但系统 shell 仍将是 Bash,因此不会中断。
然而,这意味着生成面向用户的 shell(例如 Visual Studio Code)的其他应用程序可能也需要自定义才能使用 Fish 而不是 Bash。
底部有一个 TL;DR。
为了让 gnome-shell 能够启动 Snaps,它需要两件事(括号中的值在我的 Fedora 29 桌面上,它有同样的问题):
/var/lib/snapd/snap/bin
)的路径/var/lib/snapd/desktop
)这些变量是
/etc/profile.d/snapd.sh
通过/etc/profile
传统的 bash 启动配置的。当你切换到fish时,整个
/etc/profile
启动被跳过。由于大多数发行版都假定使用 bash 并将配置脚本安装到
/etc/profile.d
中,因此根本chsh -s /bin/fish
不会使用它们。gnome-shell 找不到快照就是这样的症状之一。到目前为止,我最好的解决方案是仅使用 fish 一个交互式外壳,并让 bash 留在原地做其他的家务。
TL;博士
将用户默认 shell 保留为 bash:
内
~/.bashrc
有以下内容:对于这种
bash --login
情况(通过 X11/Wayland 调用)删除~/.profile
并添加.bash_profile
(使其特定于 bash):将此添加到您的
~/.config/fish/config.fish
文件中使用fisher安装bass:
或使用 omf 安装低音:
重新加载您的会话,现在一切都应该正常工作:)
您已安装的快照可以在 /snap/bin/ 中找到。您需要在 $PATH 中有该目录。
Ubuntu 会自动将 /snap/bin 添加到您的 $PATH。它发生在 /etc/profile.d/apps-bin-path.sh 中,它在您获得登录 shell 时运行。
我检查了,
fish
还添加/snap/bin
到 $PATH 所以通常应该没问题。你能告诉我们命令的输出吗
如果输出有
/snap/bin
,那么恭喜您在 Ubuntu 中发现了一个错误,您可以在 Launchpad 上提交报告。另外:Ubuntu 内部可能使用 $SHELL 来编写一些脚本。
fish
外壳不是 100% 兼容的,bash
看起来这是问题的原因。当您将登录 shell 更改为bash
. 例如,请参阅此报告https://youtrack.jetbrains.com/issue/CPP-2919,其中用户将其 shell 更改为/bin/tcsh
.您需要向 Ubuntu 提交错误报告,以便有人调查并修复内部脚本以使用
fish
. 如果你真的爱fish
,那就是你需要做的。;-)