Często uruchamiam ls
polecenie po uruchomieniu cd
polecenia. Jak mogę utworzyć alias (jak cs
) dla tej operacji?
źródło
Często uruchamiam ls
polecenie po uruchomieniu cd
polecenia. Jak mogę utworzyć alias (jak cs
) dla tej operacji?
Z porad i wskazówek Bash: „cd” ze stylem :
Na koniec chcę pokazać, jak napisać własny niestandardowy zamiennik dla polecenia „cd”.
Czy po przejściu do katalogu zawsze piszesz to samo? Prawdopodobnie przynajmniej za każdym razem wyświetlasz listę plików, być może do tego stopnia, że twoje ręce automatycznie wpisują „ls” po każdym „cd”.
Cóż, próbując wszystkich sposobów, jakie mogłem wymyślić, okazuje się, że jest tylko jeden sposób, aby właściwie osiągnąć cel, którego szukamy. Musimy stworzyć funkcję powłoki.
Funkcje powłoki są częścią programowania powłoki. Podobnie jak w skompilowanych językach programowania funkcje zapewniają rodzaj modułowej modularyzacji. Można stworzyć ogólną funkcję do wykonywania często używanego bitu logiki lub obliczeń z różnymi parametrami. W tym przypadku parametrem jest bieżący katalog roboczy.
Oto prosty:
function cs () { cd $1 ls }
Jak słusznie zauważa @geirha, powyższa funkcja zawiedzie, jeśli spróbujesz przełączyć się do katalogu ze spacją w nazwie:
$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>
Zamiast tego należy użyć następującej funkcji:
function cs () {
cd "$@" && ls
}
Po dodaniu tego kodu do swojego kodu ~/.bashrc
powinieneś móc to zrobić:
hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$
Możesz użyć
builtin
polecenia w bash:źródło
function ls() { /usr/bin/ls $* }
cd
ponieważ zmieniłem takżervm
mojącd
definicję. Zobacz stackoverflow.com/a/19941991/1601989Użyj funkcji zamiast aliasu:
źródło
Dzięki Florian Diesch za wskazówkę dotyczącą korzystania z funkcji. Nie mogę użyć
cs
jako nazwy, ponieważcs
w pakiecie csound znajduje się polecenie , więc użyłem golc
.Dodałem to do
~/.bash_aliases
(nano ~/.bash_aliases
):Aby to zadziałało, musi być terminal
reset
.źródło
$1
cudzysłowu spowoduje, że nie powiedzie się, jeśli katalog zawiera spacje. Ponadto powinieneś sprawdzić wartość zwracanącd
; jeśli się nie powiedzie (np. odmowa dostępu), nie ma sensu uruchamiaćls
.lc() { cd "$@" && ls; }
Jako rozszerzenie do tej funkcji:
cs() { cd "$1" && ls; }
może chcesz przekazać wszystkich argumentów funkcja docd
stosując$@
zamiast"$1"
jako takie:cs() { cd $@ && ls; }
.źródło
Miałem problemy z przedefiniowaniem,
cd
ponieważ zmieniłem takżervm
mojącd
definicję. Zobacz https://stackoverflow.com/a/19941991/1601989 . Tak naprawdę nie chciałem używać,builtin
ponieważ pomijałobyrvm
to, co robi.Dodałem następujące do mojego
.bashrc
:A potem po
rmv
wierszu w.bashrc
:źródło