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?

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.