Problema com $ PATH e arquivo executável

8

Eu tenho um arquivo executável unix localizado em um diretório que eu gerei. Acredito que preciso obter esse diretório no meu $PATHpara que o executável unix seja executável, mas a documentação para o código-fonte diz que preciso editar meu arquivo de configuração do shell para adicionar $home/meme/binao caminho do meu shell.

dr.bunsen
fonte

Respostas:

10

Se você deseja executar um programa digitando seu nome na linha de comando, o executável do programa deve estar em um dos diretórios listados na PATHvariável de ambiente. Você pode ver o valor atual da variável assim ( $é o seu prompt e o valor abaixo é um exemplo):

$ echo $PATH
/home/drbunsen/bin:/usr/local/bin:/usr/bin:/bin

Você tem várias opções; enquanto os itens 1 e 2 envolvem conceitos menos avançados, eu recomendo o item 3, que é menos trabalhoso na prática:

  • Você pode colocar o executável em um diretório que já esteja no seu PATH. Por exemplo, se /home/drbunsen/binjá estiver no seu PATH, você pode colocar o executável lá. Ou você pode colocar o executável /usr/local/binse quiser que ele esteja disponível para todos os usuários.
  • Você pode adicionar o diretório em que o executável está no seu PATH. Edite o arquivo ~/.profile( ~/significa que o arquivo está no seu diretório pessoal) (crie o arquivo se ele não existir). Adicione uma linha como esta:

    PATH=$PATH:$HOME/meme/bin
    

    (Note que é $HOMEnão, $home; unix geralmente é case-sensitive Pode também escrever. ~/meme/bin, ~É um sinônimo para $HOMEquando está no início de um caminho de arquivo.) A alteração terá efeito na próxima vez que você entrar Você pode digitar isso. mesma linha em um terminal e afetará o shell em execução nesse terminal e qualquer programa iniciado a partir dele.

  • A abordagem que recomendo é manter o executável com os outros arquivos que fazem parte do programa, em um diretório próprio, mas também não deve mudar PATH.
    Manter o executável dentro $HOME/memetem a vantagem de que, se você quiser remover ou atualizar o programa, tudo estará em um só lugar. Alguns programas ainda exigem isso para encontrar os arquivos que eles usam. Não mudar PATHtem a vantagem de que instalar e desinstalar programas é menos trabalhoso.
    Para obter o melhor dos dois mundos, crie um link simbólico em um diretório no seu PATHcomputador, apontando para o executável real. Na linha de comando, execute um comando como este:

    cd ~/bin
    ln -s ../meme/bin/* .
    

    Isso está assumindo que ~/binjá está no seu PATH; caso contrário, adicione-o ~/.profileconforme indicado acima. Escolha outro local, se quiser. Agora, disponibilizar programas é uma questão de criar os links simbólicos; torná-los indisponíveis é uma questão de remover os links simbólicos; e você pode acompanhar facilmente quais programas você instalou manualmente e onde eles moram, observando os links simbólicos.

Gilles 'SO- parar de ser mau'
fonte
Gilles, uau, MUITO obrigado pela explicação detalhada. Eu realmente aprecio sua ajuda. Obrigado por responder à minha pergunta em detalhes e em um nível que tornasse tudo claro.
dr.bunsen
Outra coisa que notei é que no diretório home / meme / não parece haver um diretório / bin. Preciso criar bin para que eu possa fazer um link simbólico aqui para o meu PATH? Obrigado.
dr.bunsen
@ dr.bunsen ~/biné um local comum e algumas distribuições o criam automaticamente. Caso contrário, você precisará criá-lo e adicioná-lo PATHmanualmente. A localização ~/biné apenas uma convenção; você pode escolher outro nome, se quiser.
Gilles 'SO- stop be evil'
O comando curinga não funciona porque ln interpreta o último item da expansão como um diretório: "Uso: ln [OPTION] ... [-T] TARGET LINK_NAME (1º formulário) ou: ln [OPTION] ... TARGET ( 2ª forma) ou: ln [OPÇÃO] ... ALVO ... DIRETÓRIO (3ª forma) ou: ln [OPÇÃO] ... -t ALVO DIRETÓRIO ... (4ª forma) "Para resolver isso, eu adicionei" - t ./ "
adam.r 25/05
1
@ adam.r eu escrevi ln -s ../meme/bin/* ., não ln -s ../meme/bin/*. Parece que você perdeu um caractere ao copiar o comando.
Gilles 'SO- stop be evil'