Prawie za każdym razem, gdy „cd” do innego katalogu na moim komputerze (w tym przypadku z systemem Mac OS X 10.6.7) za pomocą wiersza polecenia (którym jest bash), natychmiast wpisuję „ls”, aby uzyskać listę zawartości w tym katalogu. Próbuję wymyślić sposób na zastąpienie „cd”, aby zmienił się na żądany katalog, a następnie dał mi listę w jednym ujęciu.
Udało mi się uzyskać podstawową funkcjonalność, której szukam, dodając następujący wiersz do mojego ~ / .bash_profile
function cl() { cd "$@"; ls -l; }
Działa to zgodnie z oczekiwaniami. Przejście do żądanego katalogu, a następnie wyświetlenie mi zawartości. W miejscu, w którym mam problem, próbuję zastąpić samą „cd” zamiast tworzyć nowe polecenie „cl”.
Następujące rzeczy nie działają
##### Attempt 1 #####
# Hangs the command line
function cd() { cd "$@"; ls -l; }
##### Attempt 2 #####
# Hangs the command line
function cd() { 'cd' "$@"; ls -l; }
##### Attempt 3 #####
# Does not change directory.
# Does list contents, but of the directory where you started.
function cd() { /usr/bin/cd "$@"; ls -l; }
#### Other attempts that fail in various ways #####
alias cd=cd "$@"; ls -la;
alias cd="cd '$@'; ls -la;"
alias cd='cd "$@"'; ls -la;
alias cd=/usr/bin/cd "$@"; ls -la;
Próbowałem także kilku innych iteracji, których nie ma na liście, a także utworzyłem alias wskazujący działającą funkcję „cl”. Żaden z nich nie działał.
To, co przeczytałem w dokumentacji, mówi o tym, że „cd” nie może być uruchamiane jako polecenie zewnętrzne (co rozumiem jako sposób, w jaki funkcja musiałaby go użyć).
Tak więc mogę obecnie użyć polecenia „cl” i uzyskać to, czego chcę, ale pytanie brzmi / pozostaje:
Czy istnieje sposób na przesłonięcie zachowania „cd”, aby zmienić go na żądany katalog, a następnie zrobić coś innego?