Executando um comando ou script no terminal de qualquer lugar, adicionando-o ao PATH, o que estou fazendo errado?

2

No osx / linux eu quero ser capaz de executar um comando / script no terminal de qualquer lugar que esteja vinculado a um programa.

ou seja, quero poder executar:

liga

que é executado:

/usr/local/share/npm/lib/node_modules/alloy/bin/alloy

Eu estou supondo que adicionar ao .bashrc é o melhor caminho? Eu tentei correr:

export PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin"

e também:

export PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin/alloy"

Então eu iniciei uma nova janela de terminal, mas o comando liga não funciona. Estou faltando alguma coisa?

    
por Joe 27.10.2012 / 01:18

2 respostas

2

O melhor lugar para adicionar ao PATH não é o arquivo ~ / .bashrc, mas o ~ / .bash_profile, se existir. Se .bash_profile não existir, o melhor lugar é ~ / .profile. A parte ~ é automaticamente expandida para ser o seu diretório pessoal ( /home/you ).

Quando você faz login e executa o bash como o "shell de login", ele lê .bash_profile. Se não for encontrado, ele lê .profile. O .bashrc NÃO é lido neste caso (a menos que seja explicitamente chamado de dentro de .bash_profile). Eu raramente coloco qualquer coisa em .bashrc; Uma coisa que supostamente deveria ir lá são aliases se você quiser usar alguns.

Para permanecer compatível com alguns shell de logon antigos (como o ksh88), que também lêem o .profile, você pode alternativamente usar uma linha de exportação separada lá:

PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin"
export PATH

Sua sintaxe está correta para .bash_profile:

export PATH="$PATH:/usr/local/share/npm/lib/node_modules/alloy/bin"

Você pode testá-lo imediatamente, basta digitar um dos itens acima em sua linha de comando bash e tentar ver se ele é reconhecido:

echo "$PATH"
which alloy
alloy

Agora, como um teste de seu .bash_profile ou .profile, faça o login em uma nova sessão (não abra apenas outra janela de terminal, mas realmente use seu login e senha).

Para ativar a mesma configuração para todos os usuários do sistema, altere / etc / profile ou /etc/profile.d, dependendo do seu sabor do Linux. Este é um perfil de todo o sistema, lido em cada login antes do ~ / .bash_profile ou ~ / .profile.

    
por 27.10.2012 / 10:13
1

Uma solução simples para isso que não requer a manipulação do caminho é simplesmente criar um link simbólico para o aplicativo nas pastas /usr/local/bin ou /usr/local/sbin , já que essas pastas já estão em seu caminho. Eu geralmente uso isso para programas que instalam em /opt , /usr/local ou outros lugares que não estão no caminho por padrão.

ln -s /usr/local/share/npm/lib/node_modules/alloy/bin/alloy /usr/local/bin/alloy

É claro que isso nem sempre funcionará se o programa exigir que ele seja executado em um determinado diretório de trabalho; se um programa tiver esse requisito, também não funcionará se você alterar o PATH. Ocasionalmente, vejo isso por scripts mal planejados que supõem que estão sendo chamados de um determinado caminho.

    
por 27.10.2012 / 01:30

Tags