درآمدی بر Environment Variables در لینوکس


تقریباً می‌شود گفت که تمامی اسکریپت‌ها از Variable (متغیر) که حاوی یک Value (مقدار) باشد استفاده می‌کنند که کاربرد متغیرها بدین شکل است که در هر کجای دیگر اسکریپت می‌توانید مقادیر آن‌ها را مورد استفاده قرار دهید. لازم به‌ذکر است که متغیرها هم توسط کاربر و هم توسط سیستم قابل تعریف شدن هستند و این درحالی است که بسیاری اپلیکیشن‌ها از این متغیرها برای تسک‌های مختلفی من‌جمله کنترل رفتار سیستم استفاده می‌کنند.

به‌عنوان برخی از نمونه Environment Variable (متغیرهای محیطی) می‌توان به HOME ،PATH و HOST اشاره کرد؛ به‌خاطر داشته باشیم وقتی که این متغیرهای محیطی را می‌خواهیم استفاده کنیم، حتماً یک علامت $ -مثل HOME$- باید قبل از آن‌ها قرار دهیم. برای این‌ هم که بتوانیم مقادیر ذخیره در این متغیرها را نمایش دهیم، می‌توانیم به‌صورت زیر عمل کنیم:

$ echo $PATH

درعین‌حال برای مقداردهی و آپدیت مقادیر این نوع متغیرها نیازی به هیچ‌گونه پیشوندی -مثلاً علامت $- نیست؛ به‌طور مثال،‌ برای ایجاد یک متغیر تحت‌عنوان MYCOLOR و اختصاص رنگ آبی به آن، به‌صورت زیر عمل می‌کنیم:

$ MYCOLOR=blue
نکته
برای دستیابی به لیستی از متغیرهای محیطی، می‌توان از کامندهای env و printenv استفاده کرد.
به خاطر داشته باشید
همان‌طور که در کامند فوق مشاهده می‌شود، مابین MYCOLOR و علامت = و blue هیچ فاصله‌ای وجود ندارد و درصورتی‌که به اشتباه فاصله‌ای مابین آن‌ها قرار گیرد سیستم ارور خواهد داد.

خروجی گرفتن از متغیرها
به‌صورت پیش‌فرض، متغیرهایی که داخل یک اسکریپت ساخته‌ می‌شوند صرفاً در همان اسکریپت در دسترس می‌باشند که کلیهٔ فرایندهای جانبی که تحت‌عنوان Sub-Shell شناخته می‌شوند به چنین متغیرهایی دسترسی ندارند. برای آن که بتوانیم از طریق اسکریپت‌های زیرشاخه به این متغیرهای دسترسی داشته باشیم، متغیرهای ایجاد شده می‌بایست بااستفاده از دستور export به Environment Variableها ارتقأ یابند؛ در همین راستا داریم:

export VAR=value

توجه داشته باشیم که متغیرهای اکسپورت شده به اشتراک گذاشته نمی‌شوند بلکه صرفاً کپی می‌شوند و به همین دلیل هم هست که اگر تغییری در مقادیر متغیرها توسط اسکریپت‌های زیرشاخه صورت گیرد، این تغییرات توسط اسکریپت اصلی مشاهده نخواهند شد. برای روشن‌تر شدن این مسئله، مثالی می‌زنیم:

$ SITE=SokanAcademy

در این مرحله توانسته‌ایم متغیری تحت‌عنوان SITE ایجاد کنیم؛ حال اقدام به استفاده از دستوری تحت‌عنوان export می‌کنیم:

$ export SITE

اکنون دستور export را وارد کرده و اینتر می‌کنیم:

$ 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 اضافه شده است.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان