| DIRENV-STDLIB(1) | User Manuals | DIRENV-STDLIB(1) |
نام (NAME)
direnv-stdlib - توابع برای .envrc
خلاصه دستور (SYNOPSIS)
direnv stdlib
توضیحات (DESCRIPTION)
یک اسکریپت bash موسوم به stdlib را خروجی میدهد. دستورهای زیر در آن اسکریپت گنجانده شدهاند و در زمینهٔ یک .envrc بارگذاری میشوند. علاوه بر این، در صورت وجود، فایل موجود در ~/.config/direnv/direnvrc را نیز بارگذاری میکند.
STDLIB
has <command>
اگر command در دسترس باشد مقدار 0 و در غیر این صورت مقدار 1 را برمیگرداند. این میتواند یک باینری در PATH یا یک تابع پوسته باشد.
مثال:
if has curl; then echo "Yes we do" fi
expand_path <rel_path> [<relative_to>]
مسیر مطلق rel_path را نسبت به relative_to یا دایرکتوری فعلی خروجی میدهد.
مثال:
cd /usr/local/games expand_path ../foo # output: /usr/local/foo
dotenv [<dotenv_path>]
یک فایل ".env" را در محیط فعلی بارگذاری میکند.
dotenv_if_exists [<dotenv_path>]
یک فایل ".env" را در محیط فعلی بارگذاری میکند، اما فقط در صورتی که وجود داشته باشد.
user_rel_path <abs_path>
در صورت امکان، مسیر مطلق abs_path را به یک مسیر نسبی برای کاربر تبدیل میکند.
مثال:
echo $HOME # output: /home/user user_rel_path /home/user/my/project # output: ~/my/project user_rel_path /usr/local/lib # output: /usr/local/lib
find_up <filename>
مسیر filename را هنگام جستجو از دایرکتوری فعلی رو به بالا تا / خروجی میدهد. اگر فایل پیدا نشود، مقدار 1 را برمیگرداند.
مثال:
cd /usr/local/my mkdir -p project/foo touch bar cd project/foo find_up bar # output: /usr/local/my/bar
source_env <file_or_dir_path>
یک .envrc دیگر را با مشخص کردن مسیر یا نام فایل آن بارگذاری میکند.
نکته: فایل .envrc دیگر توسط چارچوب امنیتی بررسی نمیشود.
source_env_if_exists <filename>
یک ".envrc" دیگر را بارگذاری میکند، اما فقط در صورتی که وجود داشته باشد.
نکته:
برخلاف source_env،
این دستور
تنها زمانی
کار میکند
که مسیر یک
فایل مشخص
شده باشد،
نه یک
دایرکتوری.
مثال:
source_env_if_exists .envrc.private برای هر متغیری که در محیط وجود نداشته باشد یا مقدار آن خالی باشد، خطا ثبت میکند. معمولاً این دستور در ترکیب با source_env و source_env_if_exists استفاده میشود.
مثال: # expect .envrc.private to provide tokens source_env .envrc.private # check presence of tokens env_vars_required GITHUB_TOKEN OTHER_TOKEN
source_up [<filename>]
در صورت پیدا شدن یک .envrc دیگر به وسیلهٔ دستور find_up، آن را بارگذاری میکند. اگر هیچ فایلی پیدا نشود، مقدار ۱ را بازمیگرداند.
نکته: .envrc دیگر توسط چارچوب امنیتی بررسی نمیشود.
source_up_if_exists [<filename>]
در صورت پیدا شدن یک .envrc دیگر به وسیلهٔ دستور find_up، آن را بارگذاری میکند. اگر موردی یافت نشود، هیچ اتفاقی نمیافتد.
نکته: .envrc دیگر توسط چارچوب امنیتی بررسی نمیشود.
source_url <url> <integrity-hash>
اسکریپت دیگری را از url دادهشده بارگذاری میکند. پیش از بارگذاری، یکپارچگی آن را با استفاده از integrity-hash ارائهشده بررسی خواهد کرد.
برای یافتن مقدار integrity-hash، دستور direnv fetchurl <url> را اجرا کرده و هش را از پیام خروجی استخراج کنید.
همچنین برای جزئیات بیشتر direnv-fetchurl(1) را ببینید.
fetchurl <url> [<integrity-hash>]
نشانی url دادهشده را روی دیسک بارگیری کرده و مکان مسیر آن را در stdout خروجی میدهد.
اگر آرگومان integrity-hash ارائه شده باشد، صحت و یکپارچگی اسکریپت را نیز بررسی خواهد کرد.
همچنین برای جزئیات بیشتر direnv-fetchurl(1) را ببینید.
direnv_apply_dump <file>
خروجی direnv dump را که در یک فایل ذخیره شده است بارگذاری میکند.
direnv_load [<command-generating-dump-output>]
محیط تولیدشده حاصل از اجرای argv به عنوان یک دستور را اعمال میکند. این قابلیت برای اتخاذ محیط یک فرایند فرزند مفید است - ترتیبی دهید که آن فرایند “direnv dump” را اجرا کند و سپس نتایج را با direnv_load در بر بگیرید.
مثال:
direnv_load opam exec direnv dump
PATH_add <path>
مسیر بسطیافتهٔ path را به ابتدای متغیر محیطی PATH اضافه میکند. این دستور از اشتباه رایجی که در آن PATH تنها با path جدید جایگزین میشود جلوگیری میکند.
مثال:
pwd # output: /home/user/my/project PATH_add bin echo $PATH # output: /home/user/my/project/bin:/usr/bin:/bin
MANPATH_add <path>
مسیر بسطیافتهٔ path را به ابتدای متغیر محیطی MANPATH اضافه میکند. این دستور منطق اکتشافی (heuristic) ویژهٔ man را مدیریت میکند..SS path_add <varname> <path> مانند PATH_add عمل میکند، با این تفاوت که برای یک varname دلخواه است.
PATH_rm <pattern> [<pattern> ...]
دایرکتوریهایی را که با هر یک از الگوهای شل دادهشده مطابقت دارند از متغیر محیطی PATH حذف میکند. ترتیب دایرکتوریهای باقیمانده در PATH حاصل حفظ میشود.
نحو الگوی
Bash:
https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html
مثال:
echo $PATH # output: /dontremove/me:/remove/me:/usr/local/bin/:... PATH_rm '/remove/*' echo $PATH # output: /dontremove/me:/usr/local/bin/:...
load_prefix <prefix_path>
برخی متغیرهای رایج مسیر را برای پیشوندِ prefix_path دادهشده گسترش میدهد. این دستور زمانی مفید است که برنامهای را با استفاده از ./configure --prefix=$prefix_path && make install در prefix_path نصب کرده باشید و بخواهید در پروژه از آن استفاده کنید.
متغیرهای مقداردهیشده:
CPATH LD_LIBRARY_PATH LIBRARY_PATH MANPATH PATH PKG_CONFIG_PATH
مثال:
./configure --prefix=$HOME/rubies/ruby-1.9.3 make && make install # Then in the .envrc load_prefix ~/rubies/ruby-1.9.3
semver_search <directory> <folder_prefix> <partial_version>
یک دایرکتوری را برای یافتن بالاترین شماره نسخه در قالب SemVer (X.Y.Z) جستجو میکند.
مثالها:
$ tree .
.
|-- dir
|-- program-1.4.0
|-- program-1.4.1
|-- program-1.5.0
$ semver_search "dir" "program-" "1.4.0"
1.4.0
$ semver_search "dir" "program-" "1.4"
1.4.1
$ semver_search "dir" "program-" "1"
1.5.0
layout <type>
یک توزیعکننده معنایی (semantic dispatch) که برای توصیف ساختارهای رایج پروژه استفاده میشود.
layout go
مسیر "$(direnv_layout_dir)/go" را به متغیر محیطی GOPATH اضافه میکند. و همچنین مسیر "$PWD/bin" را به متغیر محیطی PATH اضافه میکند.
layout julia
متغیر محیطی JULIA_PROJECT را روی دایرکتوری فعلی تنظیم میکند.
layout node
مسیر "$PWD/node_modules/.bin" را به متغیر محیطی PATH اضافه میکند..SS layout opam متغیرهای محیطی را از opam env تنظیم میکند.
layout php
مسیر "$PWD/vendor/bin" را به متغیر محیطی PATH اضافه میکند.
layout perl
متغیرهای محیطی مورد نیاز local::lib در perl را تنظیم میکند. برای جزئیات بیشتر http://search.cpan.org/dist/local-lib/lib/local/lib.pm را ببینید.
layout pipenv
مشابه layout python، اما از Pipenv برای ساخت یک virtualenv از روی Pipfile موجود در همان دایرکتوری استفاده میکند. این مسیر را میتوان با متغیر محیطی PIPENV_PIPFILE بازنویسی کرد.
توجه داشته باشید که بر خلاف اجرای دستی Pipenv، این دستور متغیرهای محیطی را بهطور خودکار از فایل .env بارگذاری نمیکند. برای شبیهسازی این رفتار میتوانید dotenv .env را اضافه کنید.
layout pyenv [<version> ...]
مشابه layout python، اما از pyenv برای ساخت یک virtualenv با نسخهٔ مشخصشدهٔ مفسر Python استفاده میکند.
میتوان چندین نسخه را با فاصله از یکدیگر مشخص کرد؛ لطفاً برای اطلاعات بیشتر به مستندات pyenv مراجعه کنید.
layout python [<python_exe>]
یک محیط virtualenv زیر مسیر $PWD/.direnv/python-$python_version ایجاد و بارگذاری میکند. این کار نصب هرگونه egg را در زیرپوشهٔ پروژه اجباری میکند.
اگر میخواهید از نسخههای مختلف python استفاده کنید، مشخص کردن فایل اجرایی python امکانپذیر است (برای مثال: layout python python3).
توجه داشته باشید که پیشتر virtualenv زیر مسیر $PWD/.direnv/virtualenv قرار داشت و در صورت وجود، توسط direnv مجدداً استفاده خواهد شد.
layout python3
میانبری برای layout python python3
layout ruby
متغیر محیطی GEM_HOME را روی $PWD/.direnv/ruby/RUBY_VERSION تنظیم میکند. این کار نصب هرگونه gem را در زیرپوشهٔ پروژه اجباری میکند. اگر از bundler استفاده میکنید، برنامههای پوششدهندهای (wrapper) ایجاد میکند که میتوان آنها را مستقیماً و بدون پیشوند bundle exec فراخوانی کرد.
use <program_name> [<version>]
یک اعزام دستور معنایی با هدف بارگذاری وابستگیهای خارجی در محیط.
مثال:
use_ruby() {
echo "Ruby $1"
}
use ruby 1.9.3
# output: Ruby 1.9.3
use julia <version>
نسخهٔ مشخصشدهٔ Julia را بارگذاری میکند. باید با استفاده از $JULIA_VERSIONS مسیری را به دایرکتوری حاوی نسخههای نصبشدهٔ Julia مشخص کنید. میتوانید بهصورت اختیاری با استفاده از $JULIA_VERSION_PREFIX پیشوند پوشههای درون $JULIA_VERSIONS (پیشفرض julia-) را بازنویسی کنید. اگر تطابق دقیقی برای <version> یافت نشود، جستجویی انجام خواهد شد و آخرین نسخه بارگذاری میشود.
مثالها (.envrc):
use julia 1.5.1 # loads $JULIA_VERSIONS/julia-1.5.1 use julia 1.5 # loads $JULIA_VERSIONS/julia-1.5.1 use julia master # loads $JULIA_VERSIONS/julia-master
use rbenv
ابزار rbenv را بارگذاری میکند که برنامههای پوششدهندهٔ ruby را در PATH در دسترس قرار میدهد.
use nix [...]
متغیرهای محیطی را از nix-shell بارگذاری میکند.
اگر یک default.nix یا shell.nix داشته باشید، بهطور پیشفرض از آنها استفاده خواهد شد، اما همچنین میتوانید بستهها را مستقیماً مشخص کنید (برای مثال use nix -p ocaml).
use flake [<installable>]
محیط ساخت یک derivation را مشابه nix develop بارگذاری میکند.
بهطور پیشفرض مشخصه devShell از فایل flake.nix پوشه جاری را بارگذاری میکند. یا میتوانید یک «installable» مانند "nixpkgs#hello" ارسال کنید تا تمام وابستگیهای ساخت بسته hello از آخرین nixpkgs بارگذاری شود.
توجه داشته باشید که ویژگی flakes در پشت یک پرچم آزمایشی پنهان شده است که باید خودتان آن را فعال کنید. Flakes هنوز پایدار در نظر گرفته نمیشود..SS use guix [...] بارگذاری متغیرهای محیطی از guix shell.
هر آرگومان دادهشده به guix shell ارسال خواهد شد. برای مثال، use guix hello محیطی شامل بسته hello را برپا میکند. برای ایجاد محیطی به همراه وابستگیهای hello، پرچم --development استفاده میشود: use guix --development hello. گزینههای دیگر شامل --file هستند که امکان بارگذاری یک محیط از روی فایل را فراهم میکند.
ببینید: https://guix.gnu.org/manual/en/guix.html#Invoking-guix-shell
rvm [...]
در صورت نصب بودن rvm، باید دقیقاً مانند محیط شل عمل کند.
use node [<version>]:
نسخه مشخصشده NodeJS را در محیط بارگذاری میکند.
اگر نسخه ناقصی از NodeJS ارسال شود (مثلاً 4.2)، یک تطبیق تقریبی (fuzzy match) انجام شده و بالاترین نسخه منطبقِ نصبشده انتخاب میشود.
اگر هیچ نسخهای ارسال نشود، در صورت وجود فایلهای '.nvmrc' یا '.node-version' در دایرکتوری جاری، آنها را بررسی خواهد کرد.
متغیرهای محیطی:
- $NODE_VERSIONS (الزامی) به پوشهای اشاره میکند که شامل تمام نسخههای نصبشده Node است. آن پوشه باید وجود داشته باشد.
- $NODE_VERSION_PREFIX (اختیاری) [پیشفرض="node-v"] پیشوند پیشفرض نسخه را بازنویسی میکند.
use vim [<vimrc_file>]
اسکریپت vim مشخصشده (یا بهطور پیشفرض .vimrc.local) را به ابتدای متغیر محیطی DIRENV_EXTRA_VIMRC اضافه میکند.
این متغیر توسط افزونه direnv/direnv.vim شناخته میشود. در صورت یافت شدن، پس از باز کردن فایلها در دایرکتوری، آن را سورس (source) میکند.
watch_file <path> [<path> ...]
هر فایل را به فهرست نظارت (watch-list) direnv اضافه میکند. اگر فایل تغییر کند، direnv در اعلان (prompt) بعدی، محیط را بازخوانی خواهد کرد.
مثال (.envrc):
watch_file Gemfile
direnv_version <version_at_least>
بررسی میکند که نسخه direnv حداقل به اندازه version_at_least جدید باشد. این میتواند هنگام بهاشتراکگذاری یک .envrc و برای اطمینان از بهروز بودن کاربران مفید باشد.
strict_env [<command> ...]
حالت سختگیرانه اجرای شل را فعال میکند. این کار زمینه ارزیابی .envrc را وادار میکند در موارد زیر بلافاصله خارج شود:
- هر دستوری در یک خط لوله وضعیتی غیر از صفر برگرداند که بهگونهای دیگر بهعنوان بخشی از آزمونهای if، while یا until، نقیض مقدار بازگشتی (!) یا بخشی از یک زنجیره بولی (&& یا ||) مدیریت نشده باشد.
- به هر متغیری که بهصراحت مقداردهی یا اعلان نشده است (خواه با declare یا local) ارجاع داده شود.
اگر یک خط فرمان به دنبال آن بیاید، سختگیری فقط برای طول مدت اجرای آن دستور اعمال میشود.
مثال (کل اسکریپت):
strict_env has curl
مثال (دستور):
strict_env has curl سختگیری اجرای پوسته را غیرفعال میکند. اگر به دنبال آن یک خط فرمان بیاید، این وضعیت برای مدتزمان اجرای همان دستور اعمال میشود.
مثال (کل اسکریپت): unstrict_env has curl
مثال (دستور):
unstrict_env has curl
on_git_branch [<branch_name>]
اگر درون یک مخزن git با branch_name دادهشده باشید، مقدار 0 را برمیگرداند. اگر نام شاخهای تعیین نشده باشد، در صورت قرار داشتن در هر شاخهای مقدار 0 بازگردانده میشود. نیازمند نصب بودن دستور git است. در غیر این صورت مقدار 1 را برمیگرداند.
هنگامی که یک شاخه مشخص شده باشد، .git/HEAD رصد میشود تا ورود به شاخه یا خروج از آن موجب بارگذاری مجدد شود.
مثال (.envrc):
if on_git_branch child_changes; then export MERGE_BASE_BRANCH=parent_changes fi if on_git_branch; then echo "Thanks for contributing to a GitHub project!" fi
کپیرایت و تکثیر (COPYRIGHT)
مجوز MIT - کپیرایت (C) 2019 @zimbatm و مشارکتکنندگان
همچنین ببینید (SEE ALSO)
direnv(1), direnv.toml(1)
| 2019 | direnv |