Який приклад корисної програми, яку може викликати команда env?


3

Переглянувши сторінку man команд env, мені було цікаво побачити приклад корисної програми, яка використовувалася б у використанні, зазначеному нижче?

СИНОПИС

env [-i] [ім'я = значення ...] [утиліта [аргумент ...]]

ОПИС

env виконує утиліту після зміни середовища, визначеного в командному рядку. Опція name = value вказує змінну навколишнього середовища, name, зі значенням value. Опція `-i 'змушує env повністю ігнорувати середовище, яке він успадковує.

Відповіді:


5

Загальне використання - це запуск інтерпретаторів, використовуючи той факт, що envбуде шукати $ PATH для команди, яку сказано запустити. Так як притон лінія потрібна абсолютний шлях буде вказана, і так як місце розташування різних перекладачів ( perl, bash, python) може варіюватися багато , він є загальним для використання:

#!/usr/bin/env perl

замість того , щоб намагатися вгадати , чи є це /bin/perl, /usr/bin/perl, /usr/local/bin/perl, /usr/local/pkg/perl, /fileserver/usr/bin/perl, або /home/MrDaniel/usr/bin/perlна комп'ютері користувача ...

З іншого боку, envмайже завжди в /usr/bin/env. (За винятком випадків, коли його немає; деякі системи можуть використовуватись /bin/env, але це досить рідкісний випадок і трапляється лише в системах, що не є Linux.)


Ще одне використання - швидке очищення середовища за допомогою -iпараметра. У застарілих sysvinit initscripts , які є просто скриптами оболонки, часто запущеними безпосередньо системою адміністратора, необхідно переконатися, що середовище адміністратора не поширюється на розпочату демон. (Наприклад, шахрай $TZчи $HOMEможе зробити речі справді заплутаними - особливо це стосується певних демонів cron .)

У цьому випадку initscript готує коротке середовище і запускає демон, використовуючи щось на зразок:

env -i "PATH=/bin:/usr/bin" "LANG=$system_locale" /usr/sbin/crond

1

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

env lsпрацює lsбез зміни середовища. env -i lsскидає середовище. У моїй системі це видаляє кольори зі свого виводу, оскільки він знімає LSCOLORSі CLICOLOR. env LSCOLORS=GxfxcxhxdxegdggbgdAhAg lsзапуститься ls, передаючи вказаний LSCOLORSрядок і, можливо, змінивши lsкольори виводу.

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