Auf wie viele verschiedene Arten können Sie in Bash einen „Alias“ erstellen?

10

Ich kenne nur zwei Möglichkeiten: alias foo=barund function foo() { bar }.

Der Grund, den ich frage, ist, dass ich - plötzlich in einer meiner Bash-Sitzungen - den lnBefehl nicht ausführen kann, weil basher mit -bash: /usr/local/.../ln: No such file or directory(wobei der /usr/local/.../einer der Einträge in meiner PATHUmgebungsvariablen ist) fehlerhaft ist .

Es ist jedoch kein PATHProblem, denn wenn ich es ausführe which ln, wird die erwartete Binärdatei von ausgegeben /usr/bin/ln(die ich gut ausführen kann, wenn ich den absoluten Pfad spezifiziere).

Ich habe auch lnmeine aliasund functionErklärungen überprüft , und es gibt nichts:

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

Das Problem tritt nur in einer Bash-Sitzung auf. Wenn ich eine neue Shell starte, funktioniert sie wieder einwandfrei, aber ich möchte wissen, was dieses Problem in dieser einen Bash-Sitzung plötzlich verursacht hat.

Irgendwelche Ideen, was dies verursachen könnte?

Äther
quelle

Antworten:

10

Seien Sie vorsichtig, wenn Sie den whichBefehl verwenden. Verwenden Sie besser den type ...Befehl.

$ type ln
ln is /bin/ln

Sie können auch den folgenden whereisBefehl verwenden:

$ whereis ln
ln: /bin/ln /usr/share/man/man1p/ln.1p.gz /usr/share/man/man1/ln.1.gz
slm
quelle
Du hast recht! Wenn ich renne, type lnbekomme ich, ln is hashed (/usr/local/.../ln)was das Problem zu sein scheint, aber was bedeutet es genau, dass es "gehasht" ist? Ich habe noch nie von dieser Funktion in Bash gehört.
Etherice
3
@etherice - Bash verwaltet einen Hash (eine Liste mit Schlüsseln = Werten) des Namens eines Befehls und dessen Position. Sie können die Liste mit dem hash -lBefehl sehen. Es wird dynamisch erstellt, wenn Sie Befehle verwenden.
slm
@etherice - Ich habe gerade Ihre Frage positiv bewertet, sodass Sie nur 4 Punkte entfernt sind. 8-). Sie können die Antwort akzeptieren, wenn Ihr Problem behoben ist und Sie der Meinung sind, dass dies die beste Antwort ist.
slm
@etherice - da hat dich gerade jemand anderes bewertet, also hast du jetzt 16 Punkte.
slm
1
Vielen Dank! Ich bin gelaufen hash -r, um die Befehl-zu-Pfad-Hashtabelle zurückzusetzen, und bin lnjetzt wieder funktionsfähig.
Etherice