it-swarm.com.de

Bash startet aufgrund dieser Zeile in .bashrc nur langsam. Was könnte das verursachen?

Meine .bashrc-Datei enthält eine Zeile mit folgendem Inhalt:

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 erneut. Warum passiert dies? Kann ich trotzdem verschachtelte Befehle verwenden?

18
BBales

Da die Befehlsersetzung in doppelten Anführungszeichen steht, wird sie zum Zeitpunkt der Definition des Befehls ausgewertet. Dadurch durchsucht find Ihren Festplatteninhalt, während .bashrc ausgeführt wird.

Sie scheinen dagegen zu wollen, dass es zum Zeitpunkt der Verwendung ausgewertet wird. Verwenden Sie in diesem Fall einfache Anführungszeichen:

alias prog='/path/to/script.sh $(find "$(pwd)" -name prog)'

Beachten Sie, dass dieser Alias ​​fehlschlägt, wenn einer der gefundenen Dateien ein Leerzeichen enthält. Um das zu vermeiden:

alias prog='find . -name prog -exec /path/to/script.sh {} +'

Dieses letztere Formular funktioniert zuverlässig für jede Art von Dateinamen.

44
John1024