Como posso instalar meu script no diretório $ HOME / .bin (ou $ HOME / bin) do usuário e ter certeza de que ele está em seu PATH?

0

Edit: lugares onde eu disse $ HOME / .bin eu deveria ter escrito $ HOME / bin ou qualquer equivalente é bom.

Portanto, tenho um script bash que estou distribuindo como um cliente para minha API. A versão atual é instalada assim curl -s http://api.blah.com/install | sudo sh . Eu posso tentar lidar com seis sistemas de gerenciamento de pacotes diferentes para que eles possam apenas apt-get ou brew install em algum momento, mas por enquanto eu vou com o one-liner já que eu quero que esta solução funcione para múltiplos sistemas. No entanto, aparentemente existem alguns usuários em sistemas como o cygwin ou até mesmo Macs que não têm sudo ou não o configuram.

Meu script de instalação apenas faz o download do script do cliente API e o coloca em / usr / bin e o torna executável. Mas eu estou pensando com base nos problemas com o sudo eo fato de que isso realmente não precisa ser instalado globalmente, gostaria de instalá-lo na pasta $ HOME / .bin do usuário (criar que, se não existir ) e, em seguida, certifique-se de que $ HOME / bin ou $ HOME / .bin esteja em seu PATH.

Este é o meu script de instalação atual:

#!/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

Três razões pelas quais estou fazendo esta pergunta, em vez de apenas começar a resolver uma solução imediatamente: 1) Eu acho que isso é um requisito ou desejo comum (instalar algo não globalmente sem exigir privilégios) e então a resposta para isso pergunta provavelmente será útil para outra pessoa. 2) Como isso deve funcionar na maioria dos sistemas, acredito que haverá algumas rugas, talvez as que eu não conheço, já que não uso todos os tipos de sistemas regularmente, apenas o Ubuntu. 3) Acredito que pelo menos alguns usuários já tenham resolvido este problema.

Em relação a 2), primeiro enrugamento que me ocorre é que muitos usuários estão agora em zsh. Portanto, se eu adicionar ou modificar uma linha em ~ / .bashrc que atualize o PATH para incluir $ HOME / .bin, isso não funcionará para esses sistemas.

Então, para reafirmar a questão, qual código devo usar para baixar e instalar meu script no diretório $ HOME / .bin ou ($ HOME / bin) do usuário e ter certeza de que está em seu PATH, com o código exigência (ou pelo menos strong desejo) de que isso funcionará no sistema de quase todos (se eles tiverem algo parecido com um prompt do Unix)?

Além disso, mais uma metamensagem sobre essa questão. Eu a estou encurtando. Se você se opuser completamente à abordagem, por favor, não responda, em vez de me dar uma palestra. Por exemplo, estou ciente de que algumas pessoas não gostam de instalações de uma linha. Se você tiver pequenas alterações na abordagem, responda.

Muito obrigado!

    
por Jason Livesay 25.05.2014 / 04:59

1 resposta

0

Se você puder acessar a variável $ PATH do usuário, tente instalar seu script em um diretório (o?) de propriedade e executável pelo $ USER.

    
por 25.05.2014 / 18:49