псевдоним и экспорт для простых команд

33

Для простых команд, таких как less, лучше сделать псевдоним или экспортировать параметры? Есть ли преимущество одного над другим?

Например, если я хочу lessвсегда использовать -Rопцию для отображения необработанных символов, оба эти решения работают:

  1. export LESS='-R'
  2. alias less='less -R'

Для простого случая, подобного этому, есть ли преимущество одного над другим? Какие-нибудь сценарии, где один вызовет проблемы, а другой нет?

Я прочитал несколько infoи manстраниц, а также погуглить, но я до сих пор застрял на этом.

skittleys
источник
1
Нет, это действительно сводится к личным предпочтениям. Я проголосовал, чтобы закрыть это, так как это кажется более основанным на мнении.
SLM
Еще три решения: создать функцию оболочки (работает только в оболочке, но не обязательно должна быть интерактивной); создать скрипт в ~ / bin или где-либо еще (имеет накладные расходы при запуске оболочки, но работает сразу при запуске оболочек и из других программ и является постоянным); Конфигурационные файлы для конкретной программы ( lessвы можете сделать это с помощью lesskey)
deltab
3
@slm Это не основано на мнении, или, по крайней мере, так не должно было быть. Можно потребовать гораздо больше накладных расходов и излишне использовать ресурсы, особенно в более сложном сценарии. Можно было бы быть более корректным в мире * nix, или, может быть, где-то есть даже формальный стандарт. Программисты постоянно раздражаются из-за «неаккуратного кодирования», даже когда для всех целей и целей они достигают одной и той же цели.
skittleys

Ответы:

30

Одно из различий между ними состоит в том, что псевдонимы - это только функция оболочки. Переменные среды наследуются всеми подпроцессами (если не были намеренно очищены).

Переменная окружения будет больше шансов на работу , даже если lessзапущен косвенно, например, через другую оболочку (например tcsh), man, vim, psqlи т.д.

200_success
источник
3
В частности, псевдонимы работают только в интерактивных оболочках: вы не можете использовать их в сценариях оболочки, что иногда может потребоваться. bash -c 'alias ll="ls -l"; ll'не будет использовать псевдоним.
Deltab
ах, я этого не знал! Так что, если у меня есть export LESS='-R'.zshrc, откройте сеанс zsh, а затем переключитесь на bash в том же сеансе (без экспорта в .bashrc), переменная среды все равно будет установлена? Я думал бы, что оба будут потеряны ....
skittleys
@deltab ах, да, я знаю об этом различии, благодаря вопросам окраски grep. Спасибо за указание на это.
skittleys
1

Это сильно зависит от инструмента, который вы используете. Будут инструменты, которые позволяют вам использовать либо другие, которые позволяют только один.

Существуют команды, которые вызываются другими и считывают переменные среды и принимают те же параметры, но добавление к каждому из них одного и того же переключателя создает трудности, как и компиляторы, поскольку makeздесь переменные среды сияют. Вы устанавливаете переменную и забываете об этом. Это также плюс, что он может быть временным и работать для одной команды.

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

Braiam
источник