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


33

Для таких простих команд, як lessкраще зробити псевдонім або експортувати параметри? Чи є користь одного над іншим?

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

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

Чи для такої простої справи є користь одного над іншим? Будь-які сценарії, коли один спричинить проблеми, а інший не буде?

Я прочитав кілька сторінок infoі manсторінок, а також гуглив це, але я все ще зациклювався на цьому.


1
Ні, це насправді зводиться до особистих переваг. Я проголосував за те, щоб закрити це, оскільки, здається, більше заснований на думці.
slm

Ще три рішення: створити функцію оболонки (працює лише в оболонці, але вона не повинна бути інтерактивною); створити скрипт у ~ / bin або де завгодно (має запуск оболонки над головою, але працює негайно у запущених оболонках та інших програмах, і є стійким); програмні конфігураційні файли (для цього lessможна це зробити lesskey)
deltab

3
@slm Це не на основі думки, або, принаймні, так не передбачалося. Можна вимагати набагато більше накладних витрат та зайвого використання ресурсів, особливо у складнішому сценарії. Можливо, умовно правильніше у світі * nix, або, можливо, десь навіть є офіційний стандарт. Програмісти весь час дратуються через "неохайне кодування", навіть коли для всіх намірів і цілей він досягає однієї і тієї ж мети.
кеглі

Відповіді:


30

Одна відмінність між ними полягає в тому, що псевдоніми є лише функцією оболонки. Змінні середовища успадковуються усіма підпроцесами (якщо вони навмисно не очищені).

Мінлива оточення буде більше шансів на роботу , навіть якщо lessзапущений побічно, наприклад, через іншу оболонку (наприклад tcsh), man, vim, psqlі т.д.


3
Зокрема, псевдоніми працюють лише в інтерактивних оболонках: ви не можете використовувати їх у скриптах оболонки, чого ви, можливо, іноді захочете. bash -c 'alias ll="ls -l"; ll'не буде використовувати псевдонім.
дельтаб

ах, я цього не знав! Отже, якщо export LESS='-R'у мене в .zshrc відкрити сеанс zsh, а потім перейти на bash на тому самому сеансі (без експорту в .bashrc), змінна середовища все одно буде встановлена? Я б подумав, що обидва будуть загублені ....
skittleys

@deltab ах, так, я знаю про це відмінність, завдяки розфарбуванню грепа. Дякую, що вказали на це.
кеглі

1

Це дуже залежить від того, яким інструментом ви користуєтесь. Будуть інструменти, які дозволяють використовувати будь-який, інші, що дозволяє лише один.

Є команди, які викликаються іншими і читають змінні середовища і приймають ті самі перемикачі, але додавання до кожного одного перемикача - це клопот, як компілятори, як make тут, світяться змінні середовища. Ви встановлюєте змінну і забуваєте про неї. Також плюсом є те, що він може бути тимчасовим і працювати для однієї команди.

Підсумок - це суть вподобань і найкраща дія для завдання. Буде час, коли налаштування псевдоніма простіше і постійніше, ніж змінна середовище, та інші часи, коли вам потрібен масив інструментів, що ведуть себе так само, як і ви змінні любовного середовища.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.