| DIRENV(1) | User Manuals | DIRENV(1) |
نام (NAME)
direnv - خلوتسازی فایل .profile و مدیریت متغیرهای محیطی بر اساس پوشه
خلاصه دستور (SYNOPSIS)
direnv دستور ...
توضیحات (DESCRIPTION)
دستور direnv یک مدیر متغیرهای محیطی برای پوسته شماست. این ابزار میداند چگونه به پوستههای bash، zsh و fish متصل شود تا متغیرهای محیطی را بسته به پوشه جاری شما بارگذاری یا تخلیه کند. این قابلیت به شما امکان میدهد متغیرهای محیطی ویژه هر پروژه را داشته باشید و فایل "~/.profile" خود را شلوغ نکنید.
پیش از نمایش هر خط فرمان (prompt)، وجود فایل .envrc در پوشه جاری و پوشههای والد بررسی میشود. اگر فایل وجود داشته باشد، در یک زیرپوسته bash بارگذاری شده و تمام متغیرهای صادرشده (exported) توسط direnv ضبط و در پوسته جاری شما در دسترس قرار میگیرند، در حالی که متغیرهای پاکشده حذف میشوند.
از آنجا که direnv به صورت یک فایل اجرایی ایستا کامپایل شده است، سرعت آن به اندازهای بالاست که در هر خط فرمان قابل احساس نیست. این ابزار مستقل از زبان برنامهنویسی است و میتوان از آن برای ساخت راهکارهای مشابه rbenv، pyenv، phpenv و... استفاده کرد.
مثال (EXAMPLE)
$ cd ~/my_project
$ echo ${FOO-nope}
nope
$ echo export FOO=foo > .envrc
\.envrc is not allowed
$ direnv allow .
direnv: reloading
direnv: loading .envrc
direnv export: +FOO
$ echo ${FOO-nope}
foo
$ cd ..
direnv: unloading
direnv export: ~PATH
$ echo ${FOO-nope}
nope
راهاندازی (SETUP)
برای کارکرد درست direnv، باید به پوسته متصل شود. هر پوسته مکانیزم افزونه مخصوص خود را دارد:
BASH
خط زیر را به انتهای فایل ~/.bashrc اضافه کنید:
eval "$(direnv hook bash)"
اطمینان حاصل کنید که این خط حتی بعد از rvm، git-prompt و سایر افزونههای پوسته که اعلان خط فرمان را دستکاری میکنند قرار گیرد.
ZSH
خط زیر را به انتهای فایل ~/.zshrc اضافه کنید:
eval "$(direnv hook zsh)"
FISH
خط زیر را به انتهای فایل $XDG_CONFIG_HOME/fish/config.fish اضافه کنید:
direnv hook fish | source
پوسته Fish از ۳ حالت پشتیبانی میکند که میتوانید با متغیر محیطی سراسری direnv_fish_mode تنظیم کنید:
set -g direnv_fish_mode eval_on_arrow # trigger direnv at prompt, and on every arrow-based directory change (default) set -g direnv_fish_mode eval_after_arrow # trigger direnv at prompt, and only after arrow-based directory changes before executing command set -g direnv_fish_mode disable_arrow # trigger direnv at prompt only, this is similar functionality to the original behavior
TCSH
خط زیر را به انتهای فایل ~/.cshrc اضافه کنید:
eval `direnv hook tcsh`
Elvish
دستور زیر را اجرا کنید:
~> mkdir -p ~/.config/elvish/lib ~> direnv hook elvish > ~/.config/elvish/lib/direnv.elv
و خط زیر را به فایل ~/.config/elvish/rc.elv خود اضافه کنید:
use direnv
PowerShell
خط زیر را به فایل $PROFILE خود اضافه کنید:
Invoke-Expression "$(direnv hook pwsh)"
Murex
خط زیر را به فایل ~/.murex_profile خود اضافه کنید:
direnv hook murex -> source
دستورات (COMMANDS)
- direnv allow [PATH_TO_RC]
- مجوز بارگذاری فایل .envrc یا .env مشخصشده را به direnv میدهد.
- direnv deny [PATH_TO_RC]
- مجوز فایل .envrc یا .env مشخصشده را لغو میکند.
- direnv edit [PATH_TO_RC]
- فایل PATH_TO_RC یا فایل .envrc یا .env جاری را در ویرایشگر $EDITOR باز کرده و اجازه میدهد فایل پس از آن بارگذاری شود.
- direnv exec DIR COMMAND [...ARGS]
- یک دستور را پس از بارگذاری نخستین فایل .envrc یا .env یافتشده در DIR اجرا میکند.
- direnv export SHELL
- یک فایل .envrc یا .env را بارگذاری کرده و تغییرات را در قالب متغیرهای صادرشده چاپ میکند. پوستههای پشتیبانیشده: bash، zsh، fish، tcsh، elvish، pwsh، murex، json، vim، gha (گیتهاب اکشنز)، gzenv، systemd.
- direnv fetchurl <url> [<integrity-hash>]
- نشانی اینترنتی مشخصشده را در حافظه CAS برنامه direnv دریافت میکند.
- direnv help
- این راهنما را نمایش میدهد.
- direnv hook SHELL
- برای راهاندازی قلاب پوسته استفاده میشود.
- direnv prune
- فایلهای مجاز قدیمی را حذف میکند.
- direnv reload
- بارگذاری مجدد متغیرهای محیطی را فعال میکند.
- direnv status
- اطلاعات اشکالزدایی وضعیت را چاپ میکند.
- direnv stdlib
- کتابخانه استاندارد (stdlib) موجود در زمینه اجرای .envrc را نمایش میدهد.
- direnv version
- نسخه برنامه را چاپ میکند یا بررسی میکند که آیا direnv قدیمیتر از VERSION_AT_LEAST است یا خیر.
نحوه استفاده (USAGE)
در یک پوشه هدف، یک فایل .envrc ایجاد کرده و دستورات export(1) و unset(1) را درون آن اضافه کنید.
در اعلان خط فرمان بعدی متوجه خواهید شد که direnv از مسدود بودن فایل .envrc شکایت میکند. این یک مکانیزم امنیتی برای جلوگیری از بارگذاری خودکار فایلهای جدید است. در غیر این صورت هر مخزن گیت که clone یا pull کنید، یا هر آرشیو tar که استخراج کنید، میتوانست به محض اینکه به آن cd کنید هارد دیسک شما را پاک کند.
بنابراین در اینجا مطمئن هستیم که کار مخربی انجام نمیدهد. دستور direnv allow . را وارد کنید و بارگذاری محیط جدید توسط direnv را مشاهده کنید. توجه داشته باشید که direnv edit . یک میانبر کاربردی است که فایل را در ویرایشگر $EDITOR شما باز میکند و در صورت تغییر زمان اصلاح فایل، آن را به طور خودکار بازخوانی میکند.
اکنون که محیط بارگذاری شده است متوجه میشوید که به محض cd کردن به بیرون از دایرکتوری، متغیرها به صورت خودکار تخلیه میشوند. اگر مجدداً به آن cd کنید دوباره بارگذاری میشود. این پایه و اساس سازوکاری است که به شما اجازه میدهد کارهای جالبی انجام دهید.
صادر کردن دستی متغیرها کمی تکراری است، بنابراین direnv مجموعهای از توابع کمکی کاربردی را فراهم میکند که در زمینه فایل .envrc در دسترس قرار میگیرند. برای جزئیات بیشتر به صفحه راهنمای direnv-stdlib(1) مراجعه کنید. همچنین میتوانید افزونههای اختصاصی خود را درون فایلهای $XDG_CONFIG_HOME/direnv/direnvrc یا $XDG_CONFIG_HOME/direnv/lib/*.sh تعریف کنید.
امیدواریم این توضیحات برای شروع کار شما کافی باشد.
محیط (ENVIRONMENT)
- XDG_CONFIG_HOME
- مقدار پیشفرض $HOME/.config است.
- XDG_DATA_HOME
- مقدار پیشفرض $HOME/.local/share است.
فایلها (FILES)
- $XDG_CONFIG_HOME/direnv/direnv.toml
- پیکربندی Direnv. صفحه راهنمای direnv.toml(1) را ببینید.
- $XDG_CONFIG_HOME/direnv/direnvrc
- کد Bash که قبل از هر فایل .envrc بارگذاری میشود. مناسب برای افزونههای شخصی.
- $XDG_CONFIG_HOME/direnv/lib/*.sh
- کد Bash که قبل از هر فایل .envrc بارگذاری میشود. مناسب برای افزونههای متفرقه (Third-party).
- $XDG_DATA_HOME/direnv/allow
- ثبت میکند کدام فایلهای .envrc توسط direnv allow مجاز شدهاند.
مشارکت (CONTRIBUTE)
گزارشهای باگ، مشارکتها و فورکها مورد استقبال قرار میگیرند.
تمامی گزارشهای اشکال یا سایر انواع گفتگوها در پیوند زیر انجام میشود:
⟨http://github.com/direnv/direnv/issues⟩
همچنین یک ویکی در دسترس است که میتوانید الگوهای استفاده یا سایر نکات و ترفندها را به اشتراک بگذارید: ⟨https://github.com/direnv/direnv/wiki⟩
یا میتوانید به کانال #direnv در FreeNode سر بزنید: ⟨irc://#direnv@FreeNode⟩
حق نشر (COPYRIGHT)
مجوز MIT - کپیرایت (C) 2019 @zimbatm و مشارکتکنندگان
همچنین ببینید (SEE ALSO)
direnv-stdlib(1), direnv.toml(1), direnv-fetchurl(1)
| 2019 | direnv |