Como chamar um programa de qualquer diretório no terminal? Programas que não precisam de instalação

Geralmente esses programas são abertos com um ./

Já os programas que podem ser abertos com um comado simples de qualquer diretório, exemplo:

$ firefox

… geralmente tem um arquivo na pasta /usr/bin/ certo? É esse arquivo que é chamado nesse caso, não é isso?

Seria então só criar um arquivo e colocar lá no /usr/bin/?

Espero não estar falando besteiras gigantes.

Qualquer ajuda será muito apreciada.

1 Curtida

Por partes

Sim, você está chamando eles pela pasta atual, ./ significa “diretório atual”, equivale a chamar:

${PWD}/programa

PWD vem de Print Working Directory, ou em tradução livre, Mostre o Diretório de Trabalho, o diretório de trabalho é a pasta atual

Mas veja o que acontece se a gente colocar um echo (que imprime o texto passado):

$ echo "${PWD}/programa"
/pasta/onde/eu/estou/programa

Nem só lá, na verdade eles podem estar em qualquer pasta que esteja no PATH, o PATH (caminho em inglês) diz pro sistema onde procurar por executáveis quando você der o comando, /usr/bin está no PATH por isso, se o firefox estiver em /usr/bin (ou outra pasta que esteja no PATH) você não precisa digitar a pasta, pra ver onde o sistema procura executável, você pode usar:

echo ${PATH} | tr ':' '\n'

Se você colocar em qualquer pasta mostrada da lista da linha de comando acima você pode chamar de qualquer lugar, então de certa forma é isso… mas tem um porém:

A menos que você esteja trabalhando com AppImages copiar (ou mover) os arquivos pra lá não vai funcionar

Os programas (tanto Linux quanto Windows) dependem de arquivos pra funcionar, sendo assim pra mover o programa pra uma pasta no PATH você deve mover todo o conteúdo da pasta do programa… mas isso como você deve imaginar vai tornar o seu sistema um pandemônio… e criar um link vai fazer o programa pensar que foi chamado de outra pasta… então qual a solução você pode perguntar…


Então, lembra que eu disse que os programas são chamados a partir de pastas da variável PATH? Então, basta fazer o inverso, adicione a pasta do programa ao PATH, a lógica é simples, nós exportamos a variável (comando export) PATH contendo ela mesma, o sinal : e a pasta onde o programa está (que é a pasta que a gente viu lá no começo), assim sendo

  1. Primeiro a gente vê a pasta onde o programa está

Pra isso entre na pasta onde você chama o programa usando ./ e execute:

echo ${PWD}

E guarde essa pasta, para fins de exemplo, vamos dizer que a saída foi:

/home/natanal/AppImages
  1. Agora execute essa linha:
echo 'export PATH="${PATH}:<caminho encontrado no passo 1>"' >> ~/.profile

No exemplo:

echo 'export PATH="${PATH}:/home/natanal/AppImages"' >> ~/.profile

Agora é só fazer logout e login novamente pra poder chamar o programa de qualquer lugar

2 Curtidas

Se o programa for um arquivo só (como é o caso dos AppImages), sim.

Caso contrário, tem a dica do @Natanael.755 (na hora que iniciar o terminal, adicionar a pasta onde está o programa à lista de lugares em que o shell vai procurar comandos).

Outra maneira é simplesmente criar um script de shell que inicia o dito arquivo:

  1. Crie o arquivo /usr/bin/meuprograma (sem extensão mesmo) como administrador (por exemplo, sudo gedit /usr/bin/meuprograma no terminal para Ubuntu/PopOS) com o conteúdo:
#! /bin/sh
cd '/home/otavio/Aplicativos/MeuPrograma' # Ir para da pasta onde está o programa - troque o que vem depois de `cd` para a pasta do programa
exec ./meu-programa "$@" # Iniciar o programa com os argumentos passados no terminal.
  1. Dê permissão de execução com sudo chmod +x /usr/bin/meuprograma
  2. Agora meuprograma inicia o programa.
1 Curtida

Coloquei a solução no poste do @Capezotte porque acho que vai ser mais fácil para outros entenderem do jeito que ele ensinou. Eu vou usar a maneira que vc ensinou. De qualquer forma obrigado aos dois por compartilharem o conhecimento.

Edição do titulo: facilitar para outros encontrarem o tópico.

2 Curtidas