编辑:我说 $HOME/.bin 的地方应该写 $HOME/bin 或任何等效内容都可以。
因此,我有一个 bash 脚本,我正在将其作为 API 的客户端分发。当前版本的安装方式如下curl -s http://api.blah.com/install | sudo sh
。我可能会尝试处理六个不同的包管理系统,以便它们可以在某个时候使用apt-get
,brew 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 拥有并可执行的目录中。