Редактировать: места, где я сказал $ 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
Я задаю этот вопрос по трем причинам, а не просто сразу начинаю искать решение быть полезным для кого-то еще. 2) так как это должно работать на большинстве систем, я полагаю, что будет несколько морщин, возможно, таких, о которых я не знаю, поскольку я не использую все типы систем регулярно, только Ubuntu. 3) Я считаю, что, по крайней мере, несколько пользователей там уже могли решить эту проблему.
Что касается 2), первое, что приходит мне в голову, это то, что многие пользователи сейчас находятся в zsh. Так что, если я добавлю или изменим строку в ~ / .bashrc, которая обновляет PATH, добавив $ HOME / .bin, это не сработает для этих систем.
Итак, чтобы сформулировать вопрос, какой код я должен использовать, чтобы загрузить и установить мой скрипт в каталог пользователя $ HOME / .bin или ($ HOME / bin) и убедиться, что он находится в его PATH, с требованием (или, по крайней мере, сильным желанием), чтобы это работало почти в каждой системе (если у них есть что-то вроде приглашения Unix)?
Кроме того, еще одно мета-утверждение по этому вопросу. Я сокращаю его. Если вы полностью возражаете против подхода, пожалуйста, не отвечайте, а не читайте мне лекцию. Например, я знаю, что некоторым людям не нравятся однострочные установки. Если у вас есть небольшие изменения в подходе, пожалуйста, ответьте.
Спасибо большое!