De combien de façons différentes pouvez-vous créer un «alias» dans Bash?

10

Je ne connais que deux façons: alias foo=baret function foo() { bar }.

La raison pour laquelle je pose la question est que - tout d'un coup dans l'une de mes sessions bash - je ne peux pas exécuter la lncommande car bashje fais une erreur avec -bash: /usr/local/.../ln: No such file or directory(où /usr/local/.../est l'une des entrées de ma PATHvariable d'environnement).

Ce n'est pas un PATHproblème cependant, car si je l'exécute, which lnil génère le binaire attendu de /usr/bin/ln(que je peux exécuter correctement si je spécifie le chemin absolu).

J'ai également vérifié pour lnmes aliaset functiondéclarations, et il n'y a rien:

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

Le problème se produit uniquement dans une session bash. Si je démarre un nouveau shell, cela fonctionne à nouveau correctement, mais je veux savoir ce qui a causé ce problème tout à coup dans cette session particulière de bash.

Des idées sur ce qui pourrait être à l'origine de cela?

étherice
la source

Réponses:

10

Soyez prudent lorsque vous utilisez la whichcommande. Mieux vaut utiliser la type ...commande.

$ type ln
ln is /bin/ln

Vous pouvez également utiliser la whereiscommande:

$ whereis ln
ln: /bin/ln /usr/share/man/man1p/ln.1p.gz /usr/share/man/man1/ln.1.gz
slm
la source
Vous avez raison! Quand je cours, type lnj'obtiens ln is hashed (/usr/local/.../ln)ce qui semble être le problème, mais qu'est-ce que cela signifie exactement que c'est "haché"? Je n'ai jamais entendu parler de cette fonctionnalité dans bash.
etherice
3
@etherice - Bash conserve un hachage (une clé = liste de valeurs) du nom d'une commande et de son emplacement. Vous pouvez voir la liste avec la hash -lcommande. Il est construit dynamiquement lorsque vous utilisez des commandes.
slm
@etherice - Je viens de voter pour votre question, vous n'êtes donc qu'à 4 points 8-). Vous pouvez accepter la réponse lorsque votre problème est résolu et vous pensez que c'est la meilleure réponse.
slm
@etherice - là, quelqu'un d'autre vient de vous voter, alors maintenant vous avez 16 pts.
slm
1
Merci! J'ai couru hash -rpour réinitialiser la table de hachage de la commande vers le chemin et je suis de lnretour en état de marche maintenant.
etherice