Możesz to zrobić za pomocą funkcji:
$ cdls() { cd "$@" && ls; }
Te &&
środki „ cd
do katalogu, a jeśli się powiedzie (na przykład katalog istnieje), Run ls
”. Użycie &&
operatora jest lepsze niż użycie ;
operatora średnika między dwiema komendami, jak w przypadku { cd "$@" ; ls; }
. To drugie polecenie będzie działać ls
niezależnie od tego, czy cd
zadziałało, czy nie. Jeśli się cd
nie powiedzie, ls
wydrukuje zawartość twojego bieżącego katalogu, co będzie mylące dla użytkownika. Jako najlepszą praktykę używaj &&
i nie ;
.
$ cdls /var/log
CDIS.custom fsck_hfs.log monthly.out system.log
$ pwd
/var/log
Ogólnie rzecz biorąc, złą praktyką jest zmiana nazwy polecenia, które już istnieje, szczególnie w przypadku często nazywanego polecenia, takiego jak cd
. Zamiast tego utwórz nowe polecenie o innej nazwie. Jeśli zastąpisz cd
funkcję lub alias o nazwie cd
, co się stanie, gdy wejdziesz do katalogu zawierającego 100 000 plików? Istnieje wiele narzędzi, z których można korzystać cd
i mogą się mylić z powodu tego niezwykłego zachowania. Jeśli korzystasz ze wspólnego konta (na przykład root
podczas pracy z innymi administratorami systemu), zastąpienie istniejącego polecenia może być bardzo niebezpieczne, ponieważ środowisko różni się od oczekiwań ludzi.
pwd
. Nie jestem pewien, czy jest to najlepsza praktyka, ale często się to odbywa. Zobacz przykłady tldp.org/LDP/abs/html/aliases.html .cd() { builtin cd "$@" && pwd; };
- używając standardowej powłoki Bourne'a w systemie macOS (Sierra 10.12.6)Mam to w moim .bashrc i działa dobrze.
Wcześniej w moim .bashrc mam:
[ -z "$PS1" ] && return
i wszystko po tym wierszu dotyczy tylko sesji interaktywnych, więc nie wpływa to nacd
zachowanie skryptów.źródło
[ -z "$PS1" ] && return
?[ -z "$PS1" ]
sprawdza, czy$PS
(interaktywna zmienna zachęty) ma „zerową długość” (-z). Jeśli ma zerową długość, oznacza to, że nie została ustawiona, więc Bash nie może działać w trybie interaktywnym.&& return
Część wychodzi z zaopatrywaniu.bashrc
w tym momencie, w tych warunkach.i
w"$-"
:case "$-" in *i*) ;; *) return ;; esac
.PS1
Zmienna może być rozbrojona lub pusta, a powłoka może być nadal interaktywna (ale bez monitu). Sprawdziłbym,$-
żeby się upewnić.nie na temat, ponieważ pytanie jest oznaczone / bash, ale ponieważ niektóre pytania są zamknięte jako duplikat tego, który nie wspomina o bash:
Z zsh:
Funkcja chpwd () jest wywoływana przez zsh za każdym razem, gdy zmienia się bieżący katalog (za pomocą cd, pushd, popd ...). tcsh ma podobną funkcję i prawdopodobnie jest tam, skąd Zsh go otrzymał.
źródło
Dlaczego nie dodać aliasu do pliku .bashrc?
Coś jak:
źródło
Powszechne rozwiązanie tworzenia aliasu dla polecenia cd nie jest idealne, ponieważ istnieją inne polecenia, które mogą zmienić bieżący katalog, np. Popd, a nawet uruchomić skrypt z poleceniem cd.
Lepiej użyć $ PROMPT_COMMAND haka Bash, który wykonuje polecenie przed zwróceniem monitu.
Polecenie (w naszym przypadku funkcja) wykona ls tylko wtedy, gdy katalog został zmieniony w celu zmniejszenia szumów na ekranie. Kod .bashrc:
źródło
Skopiuj to:
Teraz możesz po prostu zrobić prostą płytę CD:
źródło
W bash nie można powracać do aliasów dla akcji wymagających parametru. Do tego są funkcje. Wpisz więc
~/.bashrc
następujące informacjeźródło
cd "$1" && ls
byłoby lepiej.function mycd { builtin cd "$1" && ls "$2" }
.Umieść poniższy kod w .profile i działa. Testowany na komputerze HP-Unix.
źródło
Jeszcze bardziej przydatny - z możliwością powrotu do historii :
Po zmianie katalogu pojawi się wiersz z
Stack: (current_dir) (previous_dir) ...
:, a następniels
wyjście. Aby wrócić katalogów historia po prostu pop polecenia:popd
.Dodałem,
else
więc zobaczysz błąd podczas próby przejścia do niewłaściwego katalogu.źródło
Myślę, że dobrze jest włączyć
ls
opcje w ten sposób, ponieważcd
nie ma opcji.źródło
cd
bierze opcje.Oto, co uważam za przydatne (w Debianie 9):
Daje mi to obcięte dane wyjściowe z wielokropkiem na wypadek, gdyby w tym katalogu było zbyt wiele elementów, aby konsola pozostała czysta:
źródło
źródło