Влияет ли один псевдоним на другой псевдоним?

14

У меня пока нет много псевдонимов в моем файле .bash_aliases. Только недавно я обнаружил, насколько они могут быть полезны.

Я вижу, что меня довольно сильно привлекают псевдонимы, поэтому, прежде чем файл станет слишком громоздким, я бы хотел кое-что прояснить, задав очень простой вопрос. Влияет ли один псевдоним на другой или псевдоним всегда возвращается к исходной команде?

Пример может прояснить это:

У меня есть lsпсевдоним ls -lF. Скажем , я хотел бы также псевдоним dдля ls -l | grep -E "^d": это dтеперь использовать ls -lFвместо ls? Если это так, то это порядок в файле конфигурации .bash_aliases?

man alias не просветил меня

boehj
источник

Ответы:

20

Из псевдонимов (раздел 6.6 Руководства по Bash) :

Первое слово каждой простой команды, если оно не заключено в кавычки, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима.

Это происходит, когда вы используете псевдоним, а не когда вы его определяете. Вот пример:

$ alias a1='a2 hello'
$ alias a2='echo'
$ a1
hello
$ unalias a2
$ a1
bash: a2: command not found
CJM
источник
1
Отлично, спасибо за этот пример (а также за ссылку на руководство по Bash). Я цитирую из Руководства: «Правила, касающиеся определения и использования псевдонимов, несколько сбивают с толку ... Практически для любых целей функции оболочки предпочтительнее псевдонимов». Полагаю, мне лучше научиться выполнять функции оболочки. :)
Boehj
1
Да. Псевдонимы могут сэкономить некоторую печать для общих команд, но для всего, даже удаленно сложного, написание пользовательских функций для их обработки обычно является лучшим вариантом.
Калеб
@Caleb @Gilles - Спасибо, ребята. Кстати, ls = 'ls --color', я вижу это очень удобно. Люблю этот сайт. :)
boehj
2
@boehj: практическое правило - использовать псевдоним, если вы хотите иметь автоматические аргументы для команды, используя имя команды или незначительное изменение, и действует иначе. Итак alias ls='ls --color', alias cp='cp -i'но функции для более сложных вещей. В частности, я бы сделал вашу dфункцию, чтобы вы могли передавать аргументы ls. [комментарий перепечатан, чтобы исправить запутанное брейно, спасибо @cjm]
Жиль «
@ Жиль - ОК, моя задача на сегодня - научить себя, как копировать dкак функцию оболочки.
Boehj