Ich beschaffe Bashrc's von einigen meiner Freunde. Daher habe ich doppelte Einträge in meiner $ PATH-Variablen. Ich bin nicht sicher, ob dies das Problem für Befehle ist, deren Start lange dauert. Wie funktioniert $ PATH intern in Bash? Verlangsamt mehr PFADE meine Startzeit?
45
zsh
, es ist so einfach wietypeset -aU path
, FWIW .Antworten:
Mehr Einträge in zu haben,
$PATH
verlangsamt Ihren Start nicht direkt, aber jedes Mal, wenn Sie einen bestimmten Befehl in einer Shell-Sitzung zum ersten Mal ausführen (nicht jedes Mal, wenn Sie den Befehl ausführen, da bash einen Cache verwaltet). Die Verlangsamung ist selten wahrnehmbar, es sei denn, Sie haben ein besonders langsames Dateisystem (z. B. NFS, Samba oder ein anderes Netzwerkdateisystem oder Cygwin).Doppelte Einträge sind auch etwas ärgerlich, wenn Sie Ihre
$PATH
visuellen Daten überprüfen. Sie müssen mehr Cruft durchwaten.Es ist einfach genug, doppelte Einträge zu vermeiden.
Anmerkung: Wenn Sie das Shell-Skript eines anderen Benutzers verwenden, müssen Sie den von ihm geschriebenen Code ausführen. Mit anderen Worten, Sie gewähren Ihren Freunden jederzeit Zugriff auf Ihr Konto.
Randnotiz:
.bashrc
Ist nicht der richtige Ort zum Festlegen$PATH
oder einer anderen Umgebungsvariablen. Umgebungsvariablen sollten in gesetzt werden~/.profile
. Siehe Welche Setup-Dateien sollten zum Einrichten von Umgebungsvariablen mit bash verwendet werden? , Unterschied zwischen .bashrc und .bash_profile .quelle
case :$PATH:
und nichtcase $PATH
so, dass es passt, auch wenn der Eintrag zuerst oder zuletzt ist.Ich habe gesehen, wie Leute Duplikate von ihrer PATH-Variablen mit
awk
und so etwas aufräumen :Sie könnten versuchen, dies zu Ihrem eigenen bashrc hinzuzufügen, und sicherstellen, dass Sie die anderen Dateien irgendwo als Quelle haben, bevor Sie sie ausführen.
Eine Alternative wäre die Verwendung des
pathmerge
Dienstprogramms.Was Ihr Geschwindigkeitsproblem betrifft, hat dies keine nennenswerten Auswirkungen auf die Startzeit der Shell. Es kann jedoch einige Zeit für das Ausfüllen von Registerkarten für Befehle einsparen, insbesondere wenn der Befehl nicht im Pfad gefunden wird und diese wiederholt durchsucht werden Ordner, die danach suchen.
Ein Hinweis zur Sicherheit: Sie sollten Gilles 'Warnungen bezüglich der Sicherheit hier wirklich beachten . Durch das Auffinden einer Datei, die einem anderen Benutzer gehört, geben Sie diesen Benutzern eine kostenlose Berechtigung, bei jedem Start einer Shell ihren eigenen Code als Benutzer auszuführen. Wenn Sie diesen Benutzern Ihr Kennwort nicht anvertrauen, sollten Sie ihre Shell-Dateien nicht herunterladen.
quelle
PATH=$(echo "$PATH" | awk -v RS=':' -v ORS=":" '!a[$1]++{if (NR > 1) printf ORS; printf $a[$1]}')
:
ist nicht nur ein kosmetisches Problem. Es ist dasselbe wie das Hinzufügen.
zu Ihrem Pfad, was möglicherweise gefährlich ist.Basierend auf der Antwort von @Gilles können Sie sie in eine Funktion einschließen, um die Eingabe zu minimieren:
quelle
Es wird nur die erste Übereinstimmung
$PATH
ausgeführt, sodass nachfolgende Einträge danach nicht mehr verarbeitet werden. Aus diesem Grund sollten Sie manchmal die Reihenfolge der Einträge in$PATH
Ihrer Umgebung ändern, damit sich Ihre Umgebung wie erwartet verhält.Um Ihre Frage zu beantworten: Dies sollte nicht die Ursache für einen langsamen Start sein.
quelle
TAB
? In diesem Fall sollten Sie prüfen, ob Ihre vollständige Definition nicht so aussiehtcomplete -c which -a
. Sie sollten den-a
Parameter löschen . Sie können das überprüfen , indem Sie den Befehl ausgeben:complete | grep which
.Um doppelte Einträge in meinem PATH zu vermeiden, musste ich in BOTH ~ / .bash_profile und ~ / .bashrc Folgendes einfügen:
Der Hauptnachteil ist, dass es PATH-Einträge sortiert, aber ich denke, ich kann damit leben.
quelle