Die letzte Zeile von mir .bash_profile
lautet:
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 which
Befehl 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 cp
werden Ihnen alle möglichen Interpretationen in der Reihenfolge ihrer Präferenz angezeigt. Dies schließt alle Aliase ein, da es type
sich um einen bash
internen 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 cp
eine 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/bin
am Anfang Ihrer PATH
Liste Folgendes hinzu und zeigen Sie von Punkt $HOME/bin/cp
zu 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 PATH
Variable erfolgt in einem der bash
Startskripte mit Benutzerberechtigungen.
Antwort2
Aliase sind intern in der Shell. Andere Programme kennen sie nicht.
which
ist kein integriertes Bash-Element (es ist ein integriertes Element in einigen anderen Shells, z. B. zsh). Da es which
keine privilegierten Informationen zu den Aliasnamen von Bash hat, which
sucht es nur PATH
nach dem angegebenen Begriff.
type
, andererseitsIstein integriertes Bash-Element, das über Aliase berichten kann.