DIRENV(1) User Manuals DIRENV(1)

direnv - خلوت‌سازی فایل .profile و مدیریت متغیرهای محیطی بر اساس پوشه

direnv دستور ...

دستور direnv یک مدیر متغیرهای محیطی برای پوسته شماست. این ابزار می‌داند چگونه به پوسته‌های bash، zsh و fish متصل شود تا متغیرهای محیطی را بسته به پوشه جاری شما بارگذاری یا تخلیه کند. این قابلیت به شما امکان می‌دهد متغیرهای محیطی ویژه هر پروژه را داشته باشید و فایل "~/.profile" خود را شلوغ نکنید.

پیش از نمایش هر خط فرمان (prompt)، وجود فایل .envrc در پوشه جاری و پوشه‌های والد بررسی می‌شود. اگر فایل وجود داشته باشد، در یک زیرپوسته bash بارگذاری شده و تمام متغیرهای صادرشده (exported) توسط direnv ضبط و در پوسته جاری شما در دسترس قرار می‌گیرند، در حالی که متغیرهای پاک‌شده حذف می‌شوند.

از آنجا که direnv به صورت یک فایل اجرایی ایستا کامپایل شده است، سرعت آن به اندازه‌ای بالاست که در هر خط فرمان قابل احساس نیست. این ابزار مستقل از زبان برنامه‌نویسی است و می‌توان از آن برای ساخت راهکارهای مشابه rbenv، pyenv، phpenv و... استفاده کرد.

$ 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

برای کارکرد درست direnv، باید به پوسته متصل شود. هر پوسته مکانیزم افزونه مخصوص خود را دارد:

خط زیر را به انتهای فایل ~/.bashrc اضافه کنید:

eval "$(direnv hook bash)"

اطمینان حاصل کنید که این خط حتی بعد از rvm، git-prompt و سایر افزونه‌های پوسته که اعلان خط فرمان را دستکاری می‌کنند قرار گیرد.

خط زیر را به انتهای فایل ~/.zshrc اضافه کنید:

eval "$(direnv hook zsh)"

خط زیر را به انتهای فایل $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

خط زیر را به انتهای فایل ~/.cshrc اضافه کنید:

eval `direnv hook tcsh`

دستور زیر را اجرا کنید:

~> mkdir -p ~/.config/elvish/lib
~> direnv hook elvish > ~/.config/elvish/lib/direnv.elv

و خط زیر را به فایل ~/.config/elvish/rc.elv خود اضافه کنید:

use direnv

خط زیر را به فایل $PROFILE خود اضافه کنید:

Invoke-Expression "$(direnv hook pwsh)"

خط زیر را به فایل ~/.murex_profile خود اضافه کنید:

direnv hook murex -> source

مجوز بارگذاری فایل .envrc یا .env مشخص‌شده را به direnv می‌دهد.
مجوز فایل .envrc یا .env مشخص‌شده را لغو می‌کند.
فایل PATH_TO_RC یا فایل .envrc یا .env جاری را در ویرایشگر $EDITOR باز کرده و اجازه می‌دهد فایل پس از آن بارگذاری شود.
یک دستور را پس از بارگذاری نخستین فایل .envrc یا .env یافت‌شده در DIR اجرا می‌کند.
یک فایل .envrc یا .env را بارگذاری کرده و تغییرات را در قالب متغیرهای صادرشده چاپ می‌کند. پوسته‌های پشتیبانی‌شده: bash، zsh، fish، tcsh، elvish، pwsh، murex، json، vim، gha (گیت‌هاب اکشنز)، gzenv، systemd.
نشانی اینترنتی مشخص‌شده را در حافظه CAS برنامه direnv دریافت می‌کند.
این راهنما را نمایش می‌دهد.
برای راه‌اندازی قلاب پوسته استفاده می‌شود.
فایل‌های مجاز قدیمی را حذف می‌کند.
بارگذاری مجدد متغیرهای محیطی را فعال می‌کند.
اطلاعات اشکال‌زدایی وضعیت را چاپ می‌کند.
کتابخانه استاندارد (stdlib) موجود در زمینه اجرای .envrc را نمایش می‌دهد.
نسخه برنامه را چاپ می‌کند یا بررسی می‌کند که آیا direnv قدیمی‌تر از VERSION_AT_LEAST است یا خیر.

در یک پوشه هدف، یک فایل .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 تعریف کنید.

امیدواریم این توضیحات برای شروع کار شما کافی باشد.

مقدار پیش‌فرض $HOME/.config است.
مقدار پیش‌فرض $HOME/.local/share است.

$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 مجاز شده‌اند.

گزارش‌های باگ، مشارکت‌ها و فورک‌ها مورد استقبال قرار می‌گیرند.

تمامی گزارش‌های اشکال یا سایر انواع گفتگوها در پیوند زیر انجام می‌شود:

⟨http://github.com/direnv/direnv/issues⟩

همچنین یک ویکی در دسترس است که می‌توانید الگوهای استفاده یا سایر نکات و ترفندها را به اشتراک بگذارید: ⟨https://github.com/direnv/direnv/wiki⟩

یا می‌توانید به کانال #direnv در FreeNode سر بزنید: ⟨irc://#direnv@FreeNode⟩

مجوز MIT - کپی‌رایت (C) 2019 @zimbatm و مشارکت‌کنندگان

direnv-stdlib(1), direnv.toml(1), direnv-fetchurl(1)

2019 direnv