Quantas maneiras diferentes você pode criar um "alias" no Bash?

10

Eu só sei de duas maneiras: alias foo=bare function foo() { bar }.

A razão pela qual estou perguntando é que - de repente, em uma das minhas sessões do bash - não consigo executar o lncomando porque bashestá com erro -bash: /usr/local/.../ln: No such file or directory(onde esta /usr/local/.../é uma das entradas na minha PATHvariável de ambiente).

PATHPorém, não é um problema, porque se eu executá- which lnlo, gera o binário esperado de /usr/bin/ln(o qual eu posso executar bem se especificar o caminho absoluto).

Eu também verificado para lnnos meus aliase functiondeclarações, e não há nada:

$ declare -f | grep ln
$ alias | grep ln

O problema está ocorrendo apenas em uma sessão do bash. Se eu iniciar um novo shell, ele funcionará bem novamente, mas quero saber o que causou esse problema de repente nesta sessão específica do bash.

Alguma idéia do que poderia estar causando isso?

etherice
fonte

Respostas:

10

Tenha cuidado ao usar o whichcomando. Melhor usar o type ...comando.

$ type ln
ln is /bin/ln

Você também pode usar o whereiscomando:

$ whereis ln
ln: /bin/ln /usr/share/man/man1p/ln.1p.gz /usr/share/man/man1/ln.1.gz
slm
fonte
Você está certo! Quando corro type ln, entendo ln is hashed (/usr/local/.../ln)qual parece ser o problema, mas o que significa exatamente que está "com hash"? Eu nunca ouvi falar desse recurso no bash.
31313 etherice
3
@etherice - O Bash mantém um hash (uma lista de chave = valor) do nome de um comando e onde ele está localizado. Você pode ver a lista com o hash -lcomando É construído dinamicamente à medida que você usa comandos.
Slm
@ Etherice - Acabei de votar na sua pergunta, então você fica a apenas 4 pontos de distância 8-). Você pode aceitar a resposta quando o problema for resolvido e achar que é a melhor resposta.
slm
@ Etherice - há alguém que acabou de votar em você, agora você tem 16 pts.
Slm
1
Obrigado! Corri hash -rpara redefinir a hashtable de comando para caminho e lnagora estou de volta ao funcionamento.
31513 etherice