Do jakiego polecenia służy alias?

28

Czy ktoś może mi powiedzieć, dla jakiego polecenia terminalu służy alias ll? Wszystko, co mogę znaleźć w Internecie, to wiele osób, które mówią, że jest to pseudonim dla ls -llub ls -lalub ls -ltr. Ale to po prostu źle. Wynik wygląda inaczej. Czy jest jakiś sposób na zlokalizowanie lli sprawdzenie jego składni?

Sokrates
źródło

Odpowiedzi:

76

Możesz użyć poleceń aliaslub type, aby sprawdzić, co oznacza określony alias:

$ alias ll
alias ll='ls -alF'

$ type ll
ll is aliased to `ls -alF'

Zauważ jednak, że aliasy mogą używać innych aliasów, więc może być konieczne sprawdzenie ich rekurencyjnie, np. W przypadku ll, powinieneś również sprawdzić lspolecenie, które wywołuje:

$ alias ls
alias ls='ls --color=auto'

$ type ls
ls is aliased to `ls --color=auto'

W llrzeczywistości oznacza to:

ls --color=auto -alF
Bajt Dowódca
źródło
10
Zauważ, że w ogólnym przypadku polecenie może mieć kilka jednoczesnych definicji. type -a commandnameujawni wszystko - powie ci, czy polecenie jest jednym lub kilkoma aliasami, funkcjami, wbudowanymi lub jednym lub kilkoma plikami wykonywalnymi w twojej ŚCIEŻCE, w tej kolejności. Pomaga to zrozumieć, na przykład, dlaczego odblokowanie polecenia nie przywraca go do oczekiwanego zachowania.
Wstrzymano do odwołania.
Polecam alias ll='ls -lh'. Możesz uruchomić, ls -ljeśli chcesz rozmiar w bajtach zamiast przyjaznego dla człowieka B / kiB / MiB / GiB.
Peter Cordes,
13

llto zdefiniowany w twoim aliasie ~/.bashrc, pod warunkiem, że go nie zmieniłeś, to ls -alF:

$ grep ll= <~/.bashrc
alias ll='ls -alF'

Te trzy opcje to:

  • -a, --all - nie ignoruj ​​wpisów zaczynających się od.
  • -l - użyj długiego formatu listowania
  • -F, --classify - dołącz wskaźnik (jeden z * / => @ |) do wpisów

Tak jak

$ grep ls= <~/.bashrc
alias ls='ls --color=auto'

pokazuje, że lssam jest znowu aliasem dla ls --color=auto:

Za pomocą --color=auto, lsemituje kody kolorów tylko wtedy, gdy standardowe wyjście jest podłączone do terminala. LS_COLORSZmienna może zmienić ustawienia. Użyj dircolors polecenia, aby to ustawić.

deser
źródło
Niekoniecznie .bashrc. Jeśli użyjesz innej powłoki, zostanie ona zdefiniowana w pliku .rc dla tej powłoki -, cshrc, .tchshc i tak dalej.
jamesqf
@jamesqf Myślę, że ktoś, kto używa innej powłoki, wie również, które aliasy są w niej wstępnie zdefiniowane - podjąłem pytanie o domyślną konfigurację Ubuntu, gdzie bashjest domyślna powłoka dla użytkowników i llzdefiniowany jest alias, /etc/skel/.bashrcktóry jest kopiowany do każdego nowego katalog domowy użytkownika. Oczywiście możesz użyć dowolnego pliku do przechowywania własnych aliasów - potrzebujesz tylko źródła.
deser
2
Przekierowanie pliku nie jest konieczne grep, nazwa pliku zostanie uznana za argument. Podczas gdy grepping pliki startowe pomogą ci znaleźć, gdzie alias jest (ponownie) zdefiniowany (pamiętaj, że może on znajdować się w pliku /etc- wiedząc, że zaoszczędzi ci to trochę zarysowania, jeśli usuniesz go z pliku startowego użytkownika i nadal będzie istniał, a nawet zmienia swoje zachowanie), jeśli chcesz szybko dowiedzieć się, jaka jest definicja, polecenie alias , jak zaznaczono w zaakceptowanej odpowiedzi, wykona zadanie.
Wstrzymano do odwołania.
@DennisWilliamson Nie trzeba bashotwierać pliku, ale jest o wiele lepszy! Ostatnie zdanie w pytaniu brzmi: Czy jest jakiś sposób na zlokalizowanie lli sprawdzenie jego składni? , na to odpowiada moja odpowiedź.
deser
3

Możesz zajrzeć do ~ / .bashrc (lub jakiegoś pliku, w którym znajdują się twoje aliasy) lub możesz napisać niektóre z tych poleceń w swojej powłoce:

command -v ll # "command" is a shell built-in that display information about       
              # the command. Use the built-in "help command" to see the 
              # options.
type -p ll # "type" is another built-in that display information about how the 
           # command would be interpreted
grep -r "alias ll=" ~ # and don't worry about de .file that contains your 
                      # alias. This command search recursively  under  each  
                      # folder of your home. So it's something rude.
find ~ -maxdepth 1 -type f | xargs grep "alias ll" # Just look in 
                      # the files (not folders) in your home folder

Ale po co używać find bez nazwy „. *”? Ponieważ możesz umieścić to w swoim .bashrc

source bash_hacks # where the file bash_hacks, in your home directory can 
                  # contain the alias ll='ls -la etc etc'.

Ponieważ „ll” jest aliasem, nie jest konieczne, aby miało tylko jedno znaczenie (ll = 'ls -alF --color'), możesz aliasować swoje „ll” jak inne polecenie, takie jak, nie wiem, „rm” . Myślę, że to bardziej konwencja (produkt powszechnych zastosowań).

Ale „II” może być programem przechowywanym w dowolnym folderze ŚCIEŻKI. Na przykład, jeśli masz w domu folder o nazwie „bin”, utwórz skrypt „ll” zawierający coś takiego

#!/bin/bash
ls -lhar

Ale co, jeśli zmieniono ŚCIEŻKĘ, aby dodać kolejny folder zawierający nowe polecenie „ll”? Aby uzyskać więcej interesujących informacji, możesz skorzystać z następującego łącza do powiązanego pytania.

Cuauhtli
źródło
0

Nie ma potrzeby analizowania ~ / .bashrc ani żadnego innego skryptu. Możesz sprawdzić swoje aktualne wartości wszystkich aliasów wpisując aliaspolecenie w terminalu. Wyświetli wszystkie zdefiniowane aliasy wraz z ich definicjami na ekranie.

Serg Stetsuk
źródło
Witam i zapraszam do askubuntu. Jak ta odpowiedź dodaje coś do przyjętej?
Bruni