Псевдонимы в 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
[54] Однако, псевдонимы могут «раскручивать» позиционные параметры.
- Страница для печати
- 13491 просмотр