Псевдонимы в Bash -- это ни что иное, как "горячие клавиши", средство, позволяющее избежать набора длинных строк в командной строке. Если, к примеру, в файл ~/.bashrc вставить строку alias lm="ls -l | more", то потом вы сможете экономить свои силы и время, набирая команду lm, вместо более длинной ls -l | more. Установив alias rm="rm -i" (интерактивный режим удаления файлов), вы сможете избежать многих неприятностей, потому что сократится вероятность удаления важных файлов по неосторожности.
Псевдонимы в сценариях могут иметь весьма ограниченную область применения. Было бы здорово, если бы псевдонимы имели функциональность, присущую макроопределениям в языке C, но, к сожалению, Bash не может "разворачивать" аргументы в теле псевдонима. [54] Кроме того, попытка обратиться к псевдониму, созданному внутри "составных конструкций", таких как if/then, циклы и функции, будет приводить к появлению ошибок. Практически всегда, действия, возлагаемые на псевдоним, более эффективно могут быть выполнены с помощью функций.
Пример 23-1. Псевдонимы в сценарии
#!/bin/bash shopt -s expand_aliases # Эта опция должна быть включена, иначе сценарий не сможет "разворачивать" псевдонимы. alias ll="ls -l" # В определении псевдонима можно использовать как одиночные ('), так и двойные (") кавычки. echo "Попытка обращения к псевдониму \"ll\":" ll /usr/X11R6/bin/mk* #* Работает. echo directory=/usr/X11R6/bin/ prefix=mk* # Определить -- не будет ли проблем с шаблонами. echo "Переменные \"directory\" + \"prefix\" = $directory$prefix" echo alias lll="ls -l $directory$prefix" echo "Попытка обращения к псевдониму \"lll\":" lll # Список всех файлов в /usr/X11R6/bin, чьи имена начинаются с mk. # Псевдонимы могут работать с шаблонами. TRUE=1 echo if [ TRUE ] then alias rr="ls -l" echo "Попытка обращения к псевдониму \"rr\", созданному внутри if/then:" rr /usr/X11R6/bin/mk* #* В результате -- сообщение об ошибке! # К псевдонимам, созданным внутри составных инструкций, нельзя обратиться. echo "Однако, ранее созданный псевдоним остается работоспособным:" ll /usr/X11R6/bin/mk* fi echo count=0 while [ $count -lt 3 ] do alias rrr="ls -l" echo "Попытка обращения к псевдониму \"rrr\", созданному внутри цикла \"while\":" rrr /usr/X11R6/bin/mk* #* Так же возникает ошибка. # alias.sh: line 57: rrr: command not found let count+=1 done echo; echo alias xyz='cat $0' # Сценарий печатает себя самого. # Обратите внимание на "строгие" кавычки. xyz # Похоже работает, #+ хотя документация Bash утверждает, что такой псевдоним не должен работать. # # Steve Jacobson отметил, что #+ параметр "$0" интерпретируется непосредственно, во время объявления псевдонима. exit 0
Команда unalias удаляет псевдоним, объявленный ранее .
Пример 23-2. unalias: Объявление и удаление псевдонимов
#!/bin/bash shopt -s expand_aliases # Разрешить "разворачивание" псевдонимов. alias llm='ls -al | more' llm echo unalias llm # Удалить псевдоним. llm # Сообщение об ошибке, т.к. команда 'llm' больше не распознается. exit 0
bash$ ./unalias.sh total 6 drwxrwxr-x 2 bozo bozo 3072 Feb 6 14:04 . drwxr-xr-x 40 bozo bozo 2048 Feb 6 14:04 .. -rwxr-xr-x 1 bozo bozo 199 Feb 6 14:04 unalias.sh ./unalias.sh: llm: command not found
Notes
[54] |
Однако, псевдонимы могут "раскручивать" позиционные параметры. |