Meine .bashrc
Datei enthält eine Zeile zu diesem Zweck:
alias prog="/path/to/script.sh $(find $(pwd) -name prog)"
Wenn ich diese Zeile auskommentiere, startet Bash fast sofort, wenn ich ein neues Terminal öffne. In dieser Zeile dauert es 4 bis 5 Sekunden, bis der Cursor angezeigt wird.
Das Entfernen der verschachtelten Befehle $(pwd)
usw. beschleunigt dies ebenfalls. Warum passiert das? Kann ich trotzdem verschachtelte Befehle verwenden?
find
Befehl, der beim Booten ausgeführt wird und dessen Ausführung je nach Verzeichnisstruktur einige Zeit in Anspruch nehmen kann. Wenn Sie einfache statt doppelte Anführungszeichen verwenden,find
wird dies zur Laufzeit ausgeführt, wenn dasalias
aufgerufen wird. Es hängt davon ab, welches Arbeitsverzeichnis Sie verwenden möchten, welches zur Deklarationszeit oder zur Laufzeit aktuell ist. Übrigens$(pwd)
ist ein eher ineffizienter Weg,.
oder auszudrücken$PWD
.find
? Sobald Sie es installiert haben, wissen Sie, wo es ist. Selbst wenn Sie es häufig aktualisieren und seinen Namen ändern, können Sie einen symbolischen Link zu ihm beibehalten, sodass er immer unter einem festen Namen verfügbar ist.Antworten:
Da die Befehlsersetzung in doppelten Anführungszeichen steht, wird sie zum Zeitpunkt der Definition des Befehls ausgewertet. Dies führt
find
dazu, dass der Inhalt Ihrer Festplatte während des.bashrc
Betriebs durchsucht wird.Sie scheinen dagegen zu wollen, dass es zum Zeitpunkt der Verwendung ausgewertet wird. Verwenden Sie in diesem Fall einfache Anführungszeichen:
Beachten Sie, dass dieser Alias fehlschlägt, wenn einer der gefundenen Dateien ein Leerzeichen enthält. Um das zu vermeiden:
Dieses letztere Formular funktioniert zuverlässig für jede Art von Dateinamen.
quelle
prog
,find
wenn Sie etwas eingeben, ausgeführt werden, während es zuvor nur einmal ausgeführt wurde (beim Starten der Shell).find
normalerweise viel schneller, wenn Sie das zweite Mal dasselbe ausführen .prog
und erneut ausführen,find
wenn der alte Pfad nicht mehr vorhanden ist?