我如何将我的脚本安装到用户的 $HOME/.bin (或 $HOME/bin)目录中并确保该脚本在他们的 PATH 中?

我如何将我的脚本安装到用户的 $HOME/.bin (或 $HOME/bin)目录中并确保该脚本在他们的 PATH 中?

编辑:我说 $HOME/.bin 的地方应该写 $HOME/bin 或任何等效内容都可以。

因此,我有一个 bash 脚本,我正在将其作为 API 的客户端分发。当前版本的安装方式如下curl -s http://api.blah.com/install | sudo sh。我可能会尝试处理六个不同的包管理系统,以便它们可以在某个时候使用apt-getbrew install但现在我使用单行代码,因为我希望此解决方案适用于多个系统。但是,显然有相当多的用户在 cygwin 或甚至 Mac 等系统上根本没有 sudo 或没有设置它。

我的安装脚本只是下载 API 客户端脚本并将其放在 /usr/bin 中并使其可执行。但我认为,基于 sudo 的问题以及它实际上不需要全局安装的事实,我只想将其安装到用户的 $HOME/.bin 文件夹中(如果不存在则创建该文件夹),然后确保 $HOME/bin 或 $HOME/.bin 在他们的 PATH 中。

这是我当前的安装脚本:

#!/bin/bash
BASE="https://api.blah.com"

if ! hash curl 2>/dev/null; then
  echo "Please install curl. On Ubuntu/Mint/Debian, command is sudo apt-get install curl"
  echo "Trying to install curl.."
  sudo apt-get install curl
  if ! hash curl 2>/dev/null; then
    echo "Yeah couldn't install curl.  Please install it."
    exit 1 
  else
    echo "curl installed. Continuing."
  fi
fi

sudo bash -c "curl -s $BASE/mycmd > /usr/bin/mycmd"
sudo chmod uga+x /usr/bin/mycmd

我问这个问题而不是立即开始破解解决方案的三个原因:1)我认为这是一个常见的要求或愿望(安装非全局的东西而不需要权限),所以这个问题的答案可能对其他人有用。2)因为这应该在大多数系统上运行,我相信会有一些问题,也许是我不知道的问题,因为我不经常使用所有类型的系统,只使用 Ubuntu。3)我相信至少有几个用户可能已经解决了这个问题。

关于 2),我首先想到的问题是现在很多用户都在使用 zsh。因此,如果我在 ~/.bashrc 中添加或修改一行来更新 PATH 以包含 $HOME/.bin,那么这对这些系统不起作用。

重申一下这个问题,我应该使用什么代码来下载并将我的脚本安装到用户的 $HOME/.bin 或 ($HOME/bin) 目录中,并确保该脚本位于他们的 PATH 中,并且要求(或至少强烈希望)它可以在几乎所有人的系统上运行(如果他们有类似 Unix 提示符的东西)?

另外,关于这个问题还有一条元陈述。我把它缩短了。如果你完全反对这种方法,请不要回答,而要给我上一课。例如,我知道有些人不喜欢一行安装。但是,如果你对这种方法有细微的改动,请回答。

非常感谢!

答案1

如果您可以访问用户的 $PATH 变量,请尝试将您的脚本安装在 $USER 拥有并可执行的目录中。

相关内容