如何在无法使用 sudo 的远程服务器上安装 Fish?

如何在无法使用 sudo 的远程服务器上安装 Fish?

我想在没有 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)。

这显然假设所有需要的工具(gitmakecmake)都可用,并且构建系统找到所有需要的依赖项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都有一个进程。fishbash

1在某些非 Linux 系统上,您还必须手动修补src/fallback.cpp才能locale.h包含标头。否则,该文件可能会因uselocale()未声明而无法编译。这是代码中的确认错误,由于这个问题,这将在 3.1.0 版本中修复。


与往常一样,另一个选择是与系统管理员交谈并获取他们从预编译的包中安装它。然后,您可以将登录 shell 更改为fish使用chsh系统上可用的任何类似命令。

答案2

无根安装软件是一个典型的问题,解决方案有很多。
对于内核版本<3.X,我只推荐linuxbrewbrew install fish像cmake一样处理它的依赖即可。
对于更高的,请参见很棒的 Linux 容器

相关内容