Изменить: места, где я сказал $ 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 ответ1

0

Если вы можете получить доступ к пользовательской переменной $ PATH, попробуйте установить скрипт в (?) каталог, принадлежащий и исполняемый $ USER.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .