Alias ​​„überschreibt“ keine PATH-Einträge?

Alias ​​„überschreibt“ keine PATH-Einträge?

Die letzte Zeile von mir .bash_profilelautet:

alias cp=/usr/local/bin/gcp

Dies wird jedoch durch den Eintrag in meinem zunichte gemacht $PATH:

$which cp
/bin/cp
11:54:32/OCspark $type cp
cp is aliased to `/usr/local/bin/gcp'

Ich hatte gedacht, dass Aliase das PATH.. überschreiben?

Antwort1

Der whichBefehl gibt nur ausführbare Dateien zurück: Er weiß nichts über Aliase, da es sich um ein externes Programm handelt und kein Mechanismus zum Übergeben von Aliasinformationen an einen untergeordneten Prozess vorhanden ist.

Wenn Sie den Befehl eingeben, type -a cpwerden Ihnen alle möglichen Interpretationen in der Reihenfolge ihrer Präferenz angezeigt. Dies schließt alle Aliase ein, da es typesich um einen bashinternen Befehl handelt.

Es ist wichtig zu wissen, dass ein Alias ​​nicht von einem Unterprozess wie beispielsweise einem Skript oder einem interaktiven Editor interpretiert wird, der über die Option zum Ausführen von Systembefehlen verfügt.

Wenn Sie cpeine Funktion erstellen, wird Ihre Version in Skripten ausgeführt, jedoch nicht von anderen Programmen:

cp() { /usr/local/bin/gcp "$@"; }

Wenn Sie möchten, dass Ihr cpüberall funktioniert, fügen Sie $HOME/binam Anfang Ihrer PATHListe Folgendes hinzu und zeigen Sie von Punkt $HOME/bin/cpzu Punkt darauf:

ln -s /usr/local/bin/gcp $HOME/bin/cp

Dies erstellt einen symbolischen Link. Sie können ihn jedoch auch zu einem etwas effizienteren Hardlink machen (weglassen -s), aber dazu sind normalerweise Root-Berechtigungen ( sudo ln ...) erforderlich. Das Erstellen einer Funktion und das Hinzufügen zur PATHVariable erfolgt in einem der bashStartskripte mit Benutzerberechtigungen.

Antwort2

Aliase sind intern in der Shell. Andere Programme kennen sie nicht.

whichist kein integriertes Bash-Element (es ist ein integriertes Element in einigen anderen Shells, z. B. zsh). Da es whichkeine privilegierten Informationen zu den Aliasnamen von Bash hat, whichsucht es nur PATHnach dem angegebenen Begriff.

type, andererseitsIstein integriertes Bash-Element, das über Aliase berichten kann.

verwandte Informationen