Jako skrajny przykład, pozwólcie mi tylko na alias standardowego polecenia, aby zilustrować, dlaczego aliasing standardowych poleceń może być szkodliwy:
alias ls='rm'
Oczywiście jest to złe, ponieważ któregoś dnia wywołałoby przykrą niespodziankę. Podobnie zastąpienie standardowych poleceń aliasami ostatecznie doprowadzi do niefortunnej niespodzianki, gdy najmniej się jej spodziewasz.
Ale pozwólcie, że przedstawię wspólny scenariusz, który stanie się prawie każdemu administratorowi Uniksa w miarę rozwoju kariery:
Któregoś dnia w przyszłości zaczniesz nową pracę i będziesz pracować nad nowym systemem, który został skonfigurowany przez innych. W sobotę będzie trzecia rano, a ty nie myślisz prosto i masz skłonność do popełniania błędów. Twoje standardowe środowisko nie będzie dostępne. W rzeczywistości jesteś rootem.
Biorąc to pod uwagę, czy zamierzasz pamiętać, że rm
nie jest to alias rm -i
? Czy za każdym razem, gdy zalogujesz się do skrzynki, będziesz sprawdzać specjalne aliasy? Jeśli zmienisz środowisko roota, czy twoi współpracownicy będą zadowoleni z twojej zmiany?
Mówię o tym szczerze. W swojej karierze pracowałem na tysiącach systemów i jeśli zmodyfikowałbym środowisko na wszystkich tych systemach, trudno byłoby dostrzec wartość.
Aliasing rm
z rm -i
jest bardzo powszechny i widziałem, że zapobiega wielu problemom, ale spowodował również wiele niespodzianek i godzin dodatkowej pracy, aby odzyskać przypadkowo usunięte pliki.
Teraz staram się unikać aliasingu typowych poleceń systemowych. Zamiast tego używam aliasów i funkcji do robienia rzeczy, których powłoka nie może łatwo zrobić. Teraz zwykle dołączam dodatkowy list do aliasu, na przykład:
# List long, with color or special characters, depending on OS
alias ll='ls -l'
# Long, with metacharacters, show dotfiles, don't show . and ..
alias lll='ls -lA'
# Long, with metacharacters, show dotfiles, show . and ..
alias lla='ls -la'
# List just the dotfiles
alias l.='ls -l -Ad .????*'
# Useful greps
#alias hgrep='history |grep ${*} |grep -v $$'
alias greph='history |grep ${*}'
alias grepp='ps -ef |grep ${*}'
### Highlight some text.
# From http://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches/367#367
highlight () { grep --color -E "$1|$" $2 ; }
I może naprawdę powinienem pozbyć się mojego ostatecznego aliasu, ponieważ dostosowanie się do nowych praktyk wymaga czasu:
# For safety!
alias rm='rm -i'
rm -i
, trenuje mnie trochę więcej, aby automatycznie dodawać-f
flagę.