Criando um programa em bin

7

Eu compilei um link e criei um programa em C ++ agora eu tenho

foobar.out

Eu quero poder colocá-lo no diretório bin e usá-lo como comandos do sistema, por exemplo.

ssh, echo, bash, cd...

Como posso conseguir isso?

    
por NullOverFlow 02.09.2017 / 16:03

5 respostas

25

Existem duas maneiras de permitir que você execute o binário sem especificar seu caminho (não incluindo a criação de aliases ou funções de shell para executá-lo com um caminho absoluto para você):

  1. Copie-o para um diretório que esteja no seu $PATH .
  2. Adicione o diretório onde está o seu $PATH .

Para copiar o arquivo para um diretório em seu caminho, por exemplo /usr/local/bin ( onde o software gerenciado localmente deve ser ), você deve ter privilégios de superusuário, o que geralmente significa usar sudo :

$ sudo cp -i mybinary /usr/local/bin

É necessário tomar cuidado para não sobrescrever nenhum arquivo existente no diretório de destino (por isso, adicionei -i aqui).

Para adicionar um diretório ao seu $PATH , adicione uma linha no seu arquivo ~/.bashrc (se você estiver usando bash ):

PATH="$HOME/bin:$PATH"

... se o binário estiver em $HOME/bin .

Isso tem a vantagem de você não precisar ter privilégios de superusuário ou alterar / adicionar qualquer coisa no sistema básico em sua máquina. Você só precisa mover o binário para o diretório bin do seu diretório pessoal.

Note que as alterações em .bashrc entrarão em vigor quando o arquivo for originado na próxima vez, o que acontece se você abrir um novo terminal ou sair e entrar novamente, ou executar source ~/.bashrc manualmente.

    
por 02.09.2017 / 16:18
10

Você deve ler mais sobre a variável PATH . Eu suspeito strongmente que você deve usar (ou mudar) de forma adequada.

I want to be able to put it into the bin directory

Eu acho que você quer dizer /bin/ ou /usr/bin/ . Não tenho certeza se é sábio adicionar seus próprios programas lá. Talvez seja melhor colocar um link simbólico dentro deles (por exemplo, usando algo como ln -sv $(realpath foobar.out) /usr/bin/ ), se você quer que o seu programa apareça lá (o que IMHO é provavelmente um erro, já que você está bagunçando sua distribuição gerenciador de pacotes ).

Provavelmente, instalar o programa em /usr/local/bin/ é muito mais sensato (deixar os dois /bin/ e /usr/bin/ intactos, conforme fornecidos e gerenciados pelo seu distribuição Linux ). Veja LSB e leia mais sobre o Padrão de hierarquia de arquivos .

... like system wide commands e.g .... cd

Este é um strong equívoco da sua parte (na variante original da sua pergunta, você removeu corretamente cd depois). cd não é e não pode ser um executável , é (e tem que ser) um comando interno do seu shell.

Você pode ler o Programação Avançada do Linux para entender porque cd não pode ser um executável (o diretório de trabalho atual faz parte do estado de cada processo, e cada processo tem o seu próprio e pode mudá-lo usando chdir (2) ...)

    
por 02.09.2017 / 16:17
7
install /path/to/oobar.out /usr/local/bin/
    
por 02.09.2017 / 16:16
5

Eu adicionaria a resposta aceita pelo @Kusalananda Outra vantagem de colocar seus scripts e programas em $ HOME / bin é quando você atualiza seu sistema, você não os perderá. É uma maneira melhor de gerenciar sua caixa de ferramentas pessoal e torná-la mais portátil.

    
por 02.09.2017 / 19:10
4

Copie seu executável para /usr/bin/ , então você poderá executá-lo como echo ou qualquer outro executável em /usr/bin/

cp -a <filename> /usr/bin/
chmod a+x /usr/bin/filename
    
por 02.09.2017 / 16:06