درآمدی بر Environment Variables در لینوکس
تقریباً میشود گفت که تمامی اسکریپتها از Variable (متغیر) که حاوی یک Value (مقدار) باشد استفاده میکنند که کاربرد متغیرها بدین شکل است که در هر کجای دیگر اسکریپت میتوانید مقادیر آنها را مورد استفاده قرار دهید. لازم بهذکر است که متغیرها هم توسط کاربر و هم توسط سیستم قابل تعریف شدن هستند و این درحالی است که بسیاری اپلیکیشنها از این متغیرها برای تسکهای مختلفی منجمله کنترل رفتار سیستم استفاده میکنند.
بهعنوان برخی از نمونه Environment Variable (متغیرهای محیطی) میتوان به HOME ،PATH و HOST اشاره کرد؛ بهخاطر داشته باشیم وقتی که این متغیرهای محیطی را میخواهیم استفاده کنیم، حتماً یک علامت $ -مثل HOME$- باید قبل از آنها قرار دهیم. برای این هم که بتوانیم مقادیر ذخیره در این متغیرها را نمایش دهیم، میتوانیم بهصورت زیر عمل کنیم:
1 |
$ echo $PATH |
درعینحال برای مقداردهی و آپدیت مقادیر این نوع متغیرها نیازی به هیچگونه پیشوندی -مثلاً علامت $- نیست؛ بهطور مثال، برای ایجاد یک متغیر تحتعنوان MYCOLOR و اختصاص رنگ آبی به آن، بهصورت زیر عمل میکنیم:
1 |
$ MYCOLOR=blue |
خروجی گرفتن از متغیرها
بهصورت پیشفرض، متغیرهایی که داخل یک اسکریپت ساخته میشوند صرفاً در همان اسکریپت در دسترس میباشند که کلیهٔ فرایندهای جانبی که تحتعنوان Sub-Shell شناخته میشوند به چنین متغیرهایی دسترسی ندارند. برای آن که بتوانیم از طریق اسکریپتهای زیرشاخه به این متغیرهای دسترسی داشته باشیم، متغیرهای ایجاد شده میبایست بااستفاده از دستور export به Environment Variableها ارتقأ یابند؛ در همین راستا داریم:
1 |
export VAR=value |
توجه داشته باشیم که متغیرهای اکسپورت شده به اشتراک گذاشته نمیشوند بلکه صرفاً کپی میشوند و به همین دلیل هم هست که اگر تغییری در مقادیر متغیرها توسط اسکریپتهای زیرشاخه صورت گیرد، این تغییرات توسط اسکریپت اصلی مشاهده نخواهند شد. برای روشنتر شدن این مسئله، مثالی میزنیم:
1 |
$ SITE=SokanAcademy |
در این مرحله توانستهایم متغیری تحتعنوان SITE ایجاد کنیم؛ حال اقدام به استفاده از دستوری تحتعنوان export میکنیم:
1 |
$ export SITE |
اکنون دستور export را وارد کرده و اینتر میکنیم:
1 |
$ export declare -x CLUTTER_IM_MODULE="xim" declare -x COLORTERM="truecolor" declare -x COMPIZ_BIN_PATH="/usr/bin/" declare -x COMPIZ_CONFIG_PROFILE="ubuntu" declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" declare -x DEFAULTS_PATH="/usr/share/gconf/ubuntu.default.path" declare -x DESKTOP_SESSION="ubuntu" declare -x DISPLAY=":0" declare -x GDMSESSION="ubuntu" declare -x GDM_LANG="en_US" declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated" declare -x GPG_AGENT_INFO="/home/behzadmoradi/.gnupg/S.gpg-agent:0:1:" declare -x GTK2_MODULES="overlay-scrollbar" declare -x GTK_IM_MODULE="ibus" declare -x GTK_MODULES="gail:atk-bridge:unity-gtk-module" declare -x HOME="/home/behzadmoradi" declare -x IM_CONFIG_PHASE="1" declare -x INVOCATION_ID="65e29f40117b49be9b3ede47861fc368" declare -x JAVA_HOME="/usr/local/java/jre1.8.0_131" declare -x JOURNAL_STREAM="8:26291" declare -x LANG="en_US.UTF-8" declare -x LANGUAGE="en_US" declare -x LC_ADDRESS="fa_IR" declare -x LC_IDENTIFICATION="fa_IR" declare -x LC_MEASUREMENT="fa_IR" declare -x LC_MONETARY="fa_IR" declare -x LC_NAME="fa_IR" declare -x LC_NUMERIC="fa_IR" declare -x LC_PAPER="fa_IR" declare -x LC_TELEPHONE="fa_IR" declare -x LC_TIME="fa_IR" declare -x LESSCLOSE="/usr/bin/lesspipe %s %s" declare -x LESSOPEN="| /usr/bin/lesspipe %s" declare -x LOGNAME="behzadmoradi" declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:" declare -x MANAGERPID="1184" declare -x MANDATORY_PATH="/usr/share/gconf/ubuntu.mandatory.path" declare -x OLDPWD declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/behzadmoradi/bin:/usr/local/java/jre1.8.0_131/bin" declare -x PWD="/home/behzadmoradi/Desktop" declare -x QT4_IM_MODULE="xim" declare -x QT_ACCESSIBILITY="1" declare -x QT_IM_MODULE="ibus" declare -x QT_LINUX_ACCESSIBILITY_ALWAYS_ON="1" declare -x QT_QPA_PLATFORMTHEME="appmenu-qt5" declare -x SHELL="/bin/bash" declare -x SHLVL="2" declare -x SITE="SokanAcademy" declare -x SSH_AGENT_LAUNCHER="gnome-keyring" declare -x SSH_AUTH_SOCK="/run/user/1000/keyring/ssh" declare -x TERM="xterm-256color" declare -x USER="behzadmoradi" declare -x VTE_VERSION="4402" declare -x WINDOWID="83886086" declare -x XAUTHORITY="/home/behzadmoradi/.Xauthority" declare -x XDG_CONFIG_DIRS="/etc/xdg/xdg-ubuntu:/etc/xdg" declare -x XDG_CURRENT_DESKTOP="Unity:Unity7" declare -x XDG_DATA_DIRS="/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop" declare -x XDG_GREETER_DATA_DIR="/var/lib/lightdm-data/behzadmoradi" declare -x XDG_RUNTIME_DIR="/run/user/1000" declare -x XDG_SEAT_PATH="/org/freedesktop/DisplayManager/Seat0" declare -x XDG_SESSION_DESKTOP="ubuntu" declare -x XDG_SESSION_PATH="/org/freedesktop/DisplayManager/Session0" declare -x XDG_SESSION_TYPE="x11" declare -x XMODIFIERS="@im=ibus" |
همانطور که میبینیم، در خط 49 متغیر محیطی ما تحتعنوان SITE اضافه شده است.