我想在没有 sudo 权限的远程服务器上安装 Fish shell,这样我就可以在 ssh 时使用它。
答案1
您可以将其安装在您的主目录中。
为此,您需要fish
从 GitHub 查看 shell 的源代码存储库,然后按照“构建”部分下的安装说明进行操作文件README.md
,同时告诉 CMake 您想使用替代安装目录:
git clone --depth=1 https://github.com/fish-shell/fish-shell
cd fish-shell
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$HOME/local ..
make
make install
这将fish
在$HOME/local
.可执行文件fish
将位于$HOME/local/bin
(您可能希望将其添加到您的$PATH
)。
这显然假设所有需要的工具(git
、make
等cmake
)都可用,并且构建系统找到所有需要的依赖项1。
例如,要检查特定版本标签3.0.2
(撰写本文时的最新版本),请 git clone --branch=3.0.2 --depth=1 ...
在克隆存储库时使用。如果您不指定发布标签,您将获得代码的最新不稳定开发版本。
然后,您必须fish
在启动交互式 shell 时启动普通 shell(假设您不想fish
手动启动)。如果你的 shell 是bash
,你可以通过添加
if [ -x "$HOME/local/bin/fish" ]; then
exec "$HOME/local/bin/fish"
fi
或类似的东西$HOME/.bashrc
。这种特殊的做法会代替每次启动交互式 shell时bash
都有一个进程。fish
bash
1在某些非 Linux 系统上,您还必须手动修补src/fallback.cpp
才能locale.h
包含标头。否则,该文件可能会因uselocale()
未声明而无法编译。这是代码中的确认错误,由于这个问题,这将在 3.1.0 版本中修复。
与往常一样,另一个选择是与系统管理员交谈并获取他们从预编译的包中安装它。然后,您可以将登录 shell 更改为fish
使用chsh
系统上可用的任何类似命令。
答案2
无根安装软件是一个典型的问题,解决方案有很多。
对于内核版本<3.X,我只推荐linuxbrew,brew install fish
像cmake一样处理它的依赖即可。
对于更高的,请参见很棒的 Linux 容器