Alias, czyli pójście "na skróty"...

Spis treści

Ktoś powiedział, że motorem postępu jest.. lenistwo. Trudno to ocenić, ale wiem, że wprowadzenie systemów operacyjnych z graficznym interfejsem w dużej mierze ułatwiło pracę z komputerem. Klikanie uprościło wiele.

Ale i zwolennicy korzystania z linii komend (czy konsoli) posiadają narzędzie skracające wklepywanie komend. Można w tym celu wykorzystać mechanizm tzw. aliasów. Pozwalają one na przypisanie określonym (prostym) frazom znaczenie wskazane przez użytkownika. Niektóre z dystrybucji Linux'a (dla ułatwienia życia użytkownikowi) tworzą kilka aliasów "na dzień dobry". By sprawdzić jakie aliasy są "aktywne" należy podać komendę:

user@XYZ:~$ alias

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

user@XYZ:~$

To przykład z aliasów Ubuntu 14.04 LTS. Mogą one być tworzone na czas sesji (ew. do odwołania) lub na stałe dla danego użytkownika.


Do stworzenia aliasu służy komenda alias o następującej składni:

user@XYZ:~$ alias skrot=cos
user@XYZ:~$ alias skrot=cos skrot1=cos1 ...

spowoduje to, że od tej chwili fraza skrot bedzie zastępowała w linii komend frazę (komendę) cos.  Drugi zapis pokazuje jak można "hurtowo" tworzyć aliasy.

Alias jest aktywny do końca sesji, w której został stworzony. Np. jeśli został stworzony w sesji terminala w systemie pracującym w trybie graficznym to zostanie "zapomniany" po wyjściu z sesji terminalowej.

By aliasy były aktywne dla każdej sesji użytkownika winny zostać wpisane do pliku o nazwie: .bash_aliases, który winien zostać umieszczony w jego katalogu domowym. Podczas logowania się czy uruchamiania nowej sesji odpowiedni wpis w pliku .bashrc sprawdza istnienie pliku .bash_aliases i jeśli jest wczytuje poszczególne wpisy.

.bash_aliases to zwykły plik tekstowy, w którym w kolejnych liniach znajdują się odpowiednie przypisania aliasów. Ja wykorzystuję plik o następującej treści:

alias ,0="cd ~"
alias ,1="cd .."
alias ,2="cd ../.."
alias ,3="cd ../../.."
alias ,-="cd -"
alias ,a="alias"
alias ,c="clear"
alias ,e="exit"
alias ,ce="clear; exit"
alias ,s="sudo"
alias ,ss="sudo su"
alias ,sapt="sudo apt-get update; sudo apt-get -y upgrade; sudo apt-get -y dist-upgrade"
alias ,sapc="sudo apt-get autoclean"
alias ,sapr="sudo apt-get autoremove"
alias ,sg="sudo gedit"
alias ,sh0="sudo /etc/init.d/apache2 stop"
alias ,sh1="sudo /etc/init.d/apache2 start"
alias ,sh2="sudo /etc/init.d/apache2 reload"
alias ,sk="sudo poweroff"
alias ,smc="sudo mc"
alias ,sn="sudo nano"
alias ,sps="sudo ps -aux"
alias ,sr="sudo reboot"
alias ,sv="sudo vi"
alias ,t="top"

Jak widać przyjąłem, że wszystkie moje aliasy zaczynają się od przecinka. Zapobiega to mimowolnemu nadpisaniu przeze mnie aliasem np. jakiejś komendy powłoki.

Do wyrażeń zastrzeżonych (nie wolno ich wykorzystywać jako nazwy aliasów) należą: !, case, do, done, elif, else, esac, fi, for, function, if, in, select, then, until, while, {, }, time, [, ].

Próby użycia niektórych znaków takich jak: *, ?, +, -, $, itp mogą dać nieoczekiwane rezultaty. Bo o ile przy próbie stworzenia aliasu "$" otrzymamy komunikat o błednej nazwie, to niestety możliwe jest utworzenie poniższych aliasów:

user@XYZ:~$ alias ?="<coś tam>"
user@XYZ:~$ alias *="<coś tam>"
user@XYZ:~$ alias a="" // puste przypisanie

Najmniej niebezpieczne jest ostatnie przypisanie. Po prostu alias nie robi nic (oprócz wydłużania listy aliasów). Natomiast przypisanie aliasu do "*" lib "?" powodując kłopot, o czym można się przekonać próbując je np. wykasować. Wpisz prostą komendę:

user@XYZ:~$ unalias ? *

Wynik będzie co najmniej zaskakujący. By osiągnąć to co chcieliśmy musimy wywołać komendę w postaci:

user@XYZ:~$ unalias \? \*

 


I tak doszliśmy do anulowania aliasów. Można je wykasować "indywidualnie" podając nazwę, ewentualnie nazwy aliasów. Wszystkie aliasy unieważniamy podając komendę z parametrem "-a"

user@XYZ:~$ unalias alias1 alias2 alias3
user@XYZ:~$ unalias -a

 Jeśli zdarzy nam się wykasować (potrzebne) aliasy lub niezamierzenie zmodyfikować aliasy to możemy wrócić do "stanu pierwotnego" wydając komendy:

user@XYZ:~$ unalias -a
user@XYZ:~$ . .bashrc // na początku linii jest kropka

Jeśli chcesz przywrócić/odświerzyć aliasy zawarte w pliku .bash_aliases to należy wywołać komendę:

user@XYZ:~$ source ~/.bash_aliases

Oczywiście otworzenie aliasów nastąpi również po wylogowaniu się i ponownym zalogowaniu, ale to rozwiązanie trudno uznać za optymalne.
Zaczęłem ten teks wspominając o lenistwie. Ale spójrz na te komendy:

user@XYZ:~$ alias
user@XYZ:~$ ,a

po prostu listują aktywne w sesji aliasy. Czyli "robią" to samo. Ale czyż ta druga nie "zachwyca" swą prostotą!? ;)

Oczywiście każdy użytkownik może stworzyć takie aliasy, jakie mu najbardziej pasują i są najłatwiejsze do zapamiętania.

Na zakończenie: wykorzystałem przecinek, gdyż standartowo nie jest on wykorzystywany przez system. Jeśli systemowy IFS (Internal Field Separator) ustawiony został "na przecinek" to warto przeanalizować, czy Twoja konstrukcja aliasu nie wywoła błędu. Ale to już temat na inne spotkanie.