Co jest równoważne z [alias cs = 'cd; ls'], ale z argumentem, że cs idzie na cd zamiast ls?


3

Na przykład chcę:

/tmp: $ cs /home

wykonać „cd / home; i podaj:

user1 user2 user3 egfile.txt
/home: $

Odpowiedzi:


8

Nie możesz przekazywać argumentów do aliasu, ale możesz do funkcji.

cs() {
cd "$@"
ls
}

5
Lepiej: cd "$@" && lsaby funkcja zwróciła stan niezerowy (i nie uruchomi się ls) w przypadku cdniepowodzenia. Jeszcze lepiej:, builtin cd "$@" && lsktóry nadal działa, nawet jeśli funkcja jest wywoływana cd.
Gilles

1

Łączenie odpowiedzi @garyjohn i @Gilles z interactive?czekiem i rozwinięcie lsformatowania wyjściowego.

Teraz możesz bezpiecznie dodać to do swojego ~/.bashrclub /etc/bash.bashrc:

Podstawowa wersja

#
# Replace every cd with cd+ls
#
if [[ $- == *i* ]]; then  # if running interactively
  cd() {
    builtin cd "$@" && ls
  }
fi

Urocza wersja

Filtruje dane wyjściowe lstak, aby wyświetlały się tylko rozmiar, czas i nazwa.

if [[ $- == *i* ]]; then  # if running interactively
  cd() {
    builtin cd "$@" &&
    ls --color=always -lh | 
    awk '{ for(i=5; i<=NF; i++) {printf("%s ", $i)}; print ""} '  | 
    column -t  && echo
  }
fi

IMHO, „interaktywny?” kontrole najlepiej wykonywać raz w pliku rc, z [ "$PS1" ] || returnlub [[ $- == *i* ]] || return, zamiast zawijać wszystko w bardzo duży plik if.
grawitacja

@grawity, zostawię czek w odpowiedzi, aby być bezpiecznym. Zarówno duże, jak ifi returnprawidłowe sposoby. Dziękuję za $-bardziej wiarygodną kontrolę. W końcu można używać powłoki interaktywnie bez pytania. $ PS zawsze wydawało mi się sztuczne.
Aleksandr Levchuk

Nawiasem mówiąc, nie potrzebujesz \ rur po &&/ ||operatorów.
grawitacja
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.