Die letzte Zeile von mir .bash_profile
ist:
alias cp=/usr/local/bin/gcp
Dies wird jedoch durch den Eintrag in meinem $PATH
:
$which cp
/bin/cp
11:54:32/OCspark $type cp
cp is aliased to `/usr/local/bin/gcp'
Ich hatte gedacht, dass Aliase die PATH
..?
bash
alias
bash-alias
Javadba
quelle
quelle
PATH
envar.Antworten:
Der
which
Befehl gibt nur ausführbare Dateien zurück: Er weiß nichts über Aliase, da es sich um ein externes Programm handelt und es keinen Mechanismus zum Übergeben von Aliasinformationen an einen untergeordneten Prozess gibt.Wenn Sie den Befehl eingeben
type -a cp
, werden alle möglichen Interpretationen in der Reihenfolge ihrer Präferenz angezeigt. Dies schließt jeden Alias ein, datype
es sich um einenbash
internen Befehl handelt.Es ist wichtig zu wissen, dass ein Alias nicht von einem Unterprozess wie einem Skript oder einem interaktiven Editor interpretiert wird, der die Option zum Ausführen von Systembefehlen bietet.
Wenn Sie
cp
eine Funktion erstellen, wird Ihre Version in Skripten ausgeführt, jedoch nicht in anderen Programmen:Wenn Sie möchten, dass Sie
cp
überall arbeiten, fügen Sie$HOME/bin
am Anfang IhrerPATH
Liste hinzu und zeigen$HOME/bin/cp
Sie darauf:Dies macht einen symbolischen Link, obwohl Sie ihn zu einem etwas effizienteren Hardlink machen können (weglassen
-s
), aber dies erfordert normalerweise Root-Berechtigungen (sudo ln ...
). Das Erstellen einer Funktion und das Hinzufügen zurPATH
Variablen erfolgt in einem derbash
Startskripts mit Benutzerberechtigungen.quelle
which
das läuft/usr/bin/which
verrohrt mit Eingang vom Ausgang deralias
und eine Option , die es , dass die Eingabe zu lesen erzählt und es verwenden , einen Aliasnamen zu zeigen , wenn es die Spiele Befehl. Siehe unix.stackexchange.com/questions/10525/…which
zutype
. Funktioniert dannwhich -a
wie das externe Programm, wobei die Alias- und Funktionsdefinitionen hinzugefügt werden. Im Allgemeinen nichtalias which=type
, weil ich es gerne verwende,$(which ProgName)
wenn ich die Verwendung eines externen Programms unter Umgehung von Alias- oder Funktionsdefinitionen erzwingen möchte.ln
funktioniert der nicht symbolische Vorschlag nur, wenn sich Ihr Home-Verzeichnis im selben Dateisystem befindet wie/usr/local/bin
. Es verhält sich auch merkwürdig, wenn Sie aktualisierengcp
, da Ihr fester Link wahrscheinlich immer noch auf die alte Version verweist.gcp
hängt davon ab, ob die Aktualisierung durch Öffnen und Schreiben oder durch Löschen und erneutes Erstellen erfolgt. Beachten Sie, dass es unerheblich ist, ob ein absoluter oder relativer Quellpfad zum Erstellen einer festen Verbindung verwendet wird, während eine symbolische Verknüpfung normalerweise einen absoluten Pfad benötigt. Links werden im Betriebssystem häufig verwendet und sind meist symbolisch.Aliase sind in der Shell enthalten. Andere Programme wissen nichts darüber.
which
ist kein eingebauter Bash (es ist ein eingebauter Bash in einigen anderen Shells, z. B. zsh). Dawhich
keine privilegierten Informationen in Bashs Aliasnamen enthalten sind, wirdwhich
nur nachPATH
dem angegebenen Begriff gesucht .type
Auf der anderen Seite ist ein Bash eingebaut, so dass er über Aliase berichten kann.quelle