Mój .bashrc
plik zawiera linię do tego efektu:
alias prog="/path/to/script.sh $(find $(pwd) -name prog)"
Kiedy komentuję ten wiersz, Bash zaczyna się niemal natychmiast po otwarciu nowego terminalu. W tym wierszu pojawia się opóźnienie 4–5 sekund, zanim pojawi się mój kursor.
Usunięcie zagnieżdżonych poleceń $(pwd)
itp. Również przyspiesza je ponownie. Dlaczego to się dzieje? Czy nadal mogę jakoś używać zagnieżdżonych poleceń?
find
polecenie, które jest wykonywane w czasie rozruchu i może trwać długo, w zależności od struktury katalogów. Jeśli użyjesz pojedynczego zamiast podwójnego cudzysłowu,find
zostanie ono wykonane w czasie wykonywania, gdyalias
zostanie wywołane. Zależy to od tego, którego katalogu roboczego chcesz użyć, tego, który jest bieżący w czasie deklaracji lub w czasie wykonywania. Nawiasem mówiąc,$(pwd)
jest to raczej nieefektywny sposób wyrażania.
lub$PWD
.find
? Po zainstalowaniu wiesz, gdzie to jest. Nawet jeśli często go aktualizujesz i zmieniasz jego nazwę, możesz zachować symboliczny link do niego, aby zawsze był dostępny pod stałą nazwą.Odpowiedzi:
Ponieważ podstawienie polecenia znajduje się w cudzysłowach, jest ono oceniane w momencie zdefiniowania polecenia. Powoduje
find
to przeglądanie zawartości dysku twardego podczas.bashrc
pracy.W przeciwieństwie do tego wydaje się, że chcesz to ocenić w momencie użytkowania. W takim przypadku użyj pojedynczych cudzysłowów:
Pamiętaj, że ten alias nie powiedzie się, jeśli którykolwiek ze znalezionych plików ma spacje w nazwach. Aby tego uniknąć:
Ten ostatni formularz będzie działał niezawodnie dla każdego rodzaju nazwy pliku.
źródło
prog
,find
trzeba go uruchamiać, podczas gdy wcześniej był uruchamiany tylko raz (przy uruchamianiu powłoki).find
jest zwykle znacznie szybsze.prog
i uruchomić ponownie,find
jeśli stara ścieżka już nie istnieje?