Como posso tornar um programa executável de qualquer lugar

76

O que devo fazer se quiser executar um determinado programa, independentemente do meu diretório atual? Devo criar um link simbólico para o programa na /binpasta?

aneuryzm
fonte
5
não, você deve usar a variável PATH do shell.
msw
7
Eu acho que seria bom criar uma ~/bin/pasta pessoal , adicionar ISSO ao seu caminho e criar links simbólicos nessa pasta para qualquer coisa que você queira que seja executável de qualquer lugar.
Frabjous #
1
Você também pode definir um alias com o caminho completo para o binário que deseja executar.
datasmurf 14/10/2015

Respostas:

53

Se você apenas digitar export PATH=$PATH:</path/to/file>na linha de comando, ele durará apenas a duração da sessão.

Se você quiser alterá-lo permanentemente, adicione export PATH=$PATH:</path/to/file>ao seu arquivo ~ / .bashrc (apenas no final está bom).

oadams
fonte
11
Obrigado, funciona. Para iniciantes como eu, lembre-se de omitir os colchetes angulares <>. Assim: $ PATH: / your / file / path
SAm
4
Também não inclua o próprio nome do arquivo de programa no caminho.
Olli Niemitalo
23

A resposta curta é que, para executar o programa, independentemente do seu diretório, você precisa ter o diretório do programa no caminho de pesquisa. O problema pode ser resolvido colocando o programa em uma pasta que já esteja nesse caminho ou adicionando uma nova pasta ao caminho - ou eles funcionarão. A melhor resposta depende de:

Este programa é um programa baixado que você compilou da fonte?

É bem provável que já tenha um mecanismo de instalação. Na pasta que você compilou o programa, como root, execute 'make install'

Este programa é um programa baixado que você deseja disponibilizar como parte dos programas padrão no computador?

Faz sentido colocar esse tipo de aplicativo em uma pasta padrão. é bastante comum usar diretórios como / usr / local / bin para esses programas. Você precisará de acesso root para fazer isso.

Este é um programa que você escreveu para si próprio e / ou não possui privilégios especiais no computador.

Criando uma pasta em seu diretório pessoal chamada 'bin' e colocando o programa lá. Pode ser necessário editar seu script de login para adicionar o caminho completo a esta pasta (por exemplo, / usr / home / jeremy / bin)

Embora você possa adicionar seu diretório atual ao caminho de pesquisa, precisará continuar fazendo isso a cada novo programa - e é mais trabalhoso a longo prazo.

Michael Shaw
fonte
15

Colocar um link para o arquivo no /bindiretório não é a melhor coisa a fazer por vários motivos.

  • Se o arquivo executável real estiver em um local que alguns usuários não possam ver ou executar, eles o verão como um link incorreto ou um programa com defeito.
  • O /bindiretório deve ser reservado para programas que são necessários para a execução do sistema (coisas como chmod, mkdir, etc.).

Você pode realmente colocar (instalar) o arquivo executável no arquivo /usr/bin/ou até mesmo /usr/local/bin/. Obviamente, você instalou o programa manualmente nesse ponto; sua distribuição não irá acompanhá-la da mesma forma que os demais programas - você precisará atualizá-la manualmente quando necessário e removê-la manualmente, se desejar. Além disso, você terá que saber de quais pacotes ele depende (parece que você já usa o programa, então isso foi resolvido, mas em geral ...).

A menos que eu esteja configurando um programa que eu espero que outros usuários usem, não é isso que eu costumo fazer: eu crio um diretório bin apenas para mim no meu diretório pessoal e edito meu perfil de shell para adicionar ~/bin/à minha PATHvariável de ambiente. Acho mais fácil acompanhar os programas que instalei dessa maneira, porque ele é separado do restante do sistema.

Shawn J. Goff
fonte
6

Se você deseja executar um comando foono diretório em que seu shell está, basicamente tem duas opções:

  1. Digite ./foono prompt do shell.

  2. Adicione o .diretório ( .é um nome para "o diretório atual") à PATHvariável de ambiente; como você faz isso depende do shell que você está usando:

    • para shells do tipo Bourne (bash, zsh, ksh, etc.) que você escreve (consulte esta página para obter mais informações):

      export PATH=$PATH:.
      
    • para shells do tipo csh (tcsh, csh) que você escreve (consulte esta página para obter mais informações):

      set path = ( $path .)
      

Observe que 2. é um risco de segurança em sistemas multiusuário: imagine que você faça um cddiretório /tmpe um usuário mal-intencionado tenha criado um binário de malware chamado lslá.

Riccardo Murri
fonte
2
Sim, acho que as opções mostram que o Unix permite fazer as coisas, isso é considerado uma prática ruim. Adicionando. para o seu caminho também pode criar outros efeitos colaterais que geralmente são ruins.
The Unix Janitor
1

Mexer com o PATHabre você para executar programas maliciosos por engano. O padrão é instalar o material "local" em /usr/local(consulte FHS , que codifica o uso do Unix: um pouco datado, mas fornece justificativa)., /usr/local/binGeralmente é PATHpara todos os usuários.

Meus programas "instalados localmente" estão dentro $HOME/bin, definidos na dança padrão ./configure --prefix=$HOME ..., juntamente com alguns aliases (bash) para escolher, por exemplo, o git auto-construído sobre o sistema (os que não são conflitantes são encontrados no PATHfinal).

vonbrand
fonte