如何在 cygwin 中使用 fish shell?

如何在 cygwin 中使用 fish shell?

是否可以将 fish shell 与 cygwin 一起使用?我无法在 cygwin 中编译源代码,也没有找到任何预编译的软件包。cygwin 中没有 fish 有什么好理由吗?

答案1

fish shell 2.1.0 现在在 Cygwin 中得到官方支持,可以使用默认安装程序进行安装。

答案2

以下是我编译的方法在 Cygwin 中。

步骤 1:检查所有依赖项是否已安装

首先,确保我们有以下 cygwin 包:

  • libncurses-devel
  • libiconv
  • autoconf(实际上不是 fish 的依赖,但我们在后面的步骤中需要它)

第 2 步:下载并解压最新源

接下来,从下载最新源代码http://fishshell.com(我用了鱼-1.23.1.tar.gz)。将源文件提取到您选择的目录并 cd 到该目录:

$ tar zxvf fish-1.23.1.tar.gz -C /usr/local/src/
$ cd /usr/local/src/fish-1.23.1/

步骤 3:编辑configure.ac以删除iconv

现在由于某种原因,./configure无法正确检测libiconv。为了解决这个问题,我们删除了对它的检查(我们稍后会手动指定库)。为此,我们编辑configure.ac并删除了对的检查iconv_open。搜索iconv_open显示 3 次出现;我们将它们全部注释掉。所以,从:

AC_SEARCH_LIBS( iconv_open, iconv, ....)

我们改为:

#AC_SEARCH_LIBS( iconv_open, iconv, ....)

步骤 4:重建并运行./configure

接下来,我们./configure通过运行autoconf然后运行配置脚本来重建脚本:

$ autoconf && ./configure

步骤 5:编辑Makefile以包含正确的路径curses.h

我遇到的另一个问题是curses.h-- gcc 找不到它。快速搜索后发现它在 中/usr/include/ncurses

Makefile在 中有一个硬编码的包含路径,CFLAGS但它指向/usr/local/include/ncurses

因此,我们进行编辑Makefile并更改:

CFLAGS = -I/usr/local/include/ncurses -std=c99 ....

CFLAGS = -I/usr/include/ncurses -std=c99 ...

步骤 6:导出LDFLAGS到链接libiconv,我们就可以进行编译/安装了。

最后我们把需要的导出来LDFLAGS链接进去iconv,然后编译安装!

$ export LDFLAGS="-liconv"
$ make && make install

享受fish

$ fish
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
me@home /u/l/s/fish-1.23.1> 

答案3

检查鱼类问题第680章#319在 GitHub 上,有在 cygwin 上编译 fish 所需的一切。

相关内容