> For the complete documentation index, see [llms.txt](https://sh.howtocode.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sh.howtocode.dev/2.0.0.part2intro/2.1.0.environment/2.1.1.seethrough.md).

# এনভায়রনমেন্টের ভিতরে দেখা

আমরা এবার দেখতে চেষ্টা করবো এনভায়রনমেন্ট কী কী নিয়ে তৈরী হয়। কী জিনিস বা কী ধরনের তথ্যই বা সে সংরক্ষণ করে। শেল দুই ধরনের ভেরিয়েবল বা চলক সংরক্ষণ করে। এনভায়রনমেন্ট ভেরিয়েবল এবং শেল ভেরিয়েবল। প্রত্যেকটা ভেরিয়েবল এর একটা নাম থাকে। যেমন USER বা HOSTNAME। এবং তার একটা মান থাকে। এই মানটা অপরিবর্তনশীল নয় কাজেই ভেরিয়েবল। যেমন আমার ইউজারনেম me হলে আমার টার্মিনাল থেকে USER ভেরিয়েবল এর মান জানতে চাইলে বলবে 'me' আবার কোনো ইউজারের নাম bob হলে তাকে bob দেখাবে। শেল ভেরিয়েবল হচ্ছে কিছু ভেরিয়েবল যা শেল এনভায়রনমেন্টে যোগ করে। তাছাড়া বাকী সব এনভায়রনমেন্ট ভেরিয়েবল।

ভেরিয়েবল দেখতে আমরা bash এর সাথে বিল্টইন **set** কমান্ডটি ব্যবহার করতে পারি। যেটি একটু দুর্বোধ্যভাবে সব শেল ভেরিয়েবল ও এনভায়রনমেন্ট ভেরিয়েবল সবই দেখাবে। যেহেতু সেটা অনেক লম্বা ও ক্লান্তিকর তাই খুব দরকার না হলে তা ব্যবহার করা হয় না। আমাদের সাধারন কাজকর্ম শুধু শেল ভেরিয়েবল ঘিরেই আবর্তিত হয়। তাই আমরা শুধু সেটা দেখার জন্য **printenv** কমান্ডটি ব্যবহার করবো। যেহেতু এই লিস্টটাও কম লম্বা না, নিরীক্ষণের সুবিধার জন্য এর আউটপুটকে পাইপের মাধ্যমে **less** কমান্ডের সাথে দেখবো:

```
me@howtocode-pc:~$ printenv | less
```

ফলাফলে less এর মাধ্যমে এমন একটা স্ক্রলেবল ডকুমেন্ট হিসেবে দেখাবে:

```
XDG_VTNR=7
LC_PAPER=en_US.UTF-8
SSH_AGENT_PID=2794
LC_ADDRESS=en_US.UTF-8
XDG_SESSION_ID=c2
SELINUX_INIT=YES
LC_MONETARY=en_US.UTF-8
CLUTTER_IM_MODULE=xim
SESSION=gnome
GIO_LAUNCHED_DESKTOP_FILE_PID=3118
TERM=xterm
VTE_VERSION=3409
XDG_MENU_PREFIX=gnome-
SHELL=/bin/bash
SSH_AGENT_LAUNCHER=upstart
LC_NUMERIC=en_US.UTF-8
UPSTART_SESSION=unix:abstract=/com/ubuntu/upstart-session/1001/2711
GNOME_KEYRING_CONTROL=/run/user/1001/keyring-ZCsGoa
USER=me
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: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:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=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:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=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:*.axa=00;36:
:
```

এখানে আমরা প্রত্যেক ভেরিয়েবলের নাম ও তার মান জানতে পারছি। যেমন USER নামের ভেরিয়েবলের মান 'me'। আমরা শুধু নির্দিষ্ট ভেরিয়েবলের মানও বের করতে পারি:

```
me@howtocode-pc:~$ printenv USER
me
me@howtocode-pc:~$ echo $USER
me
```

এখানে আমরা দুটো পদ্ধতি দেখলাম। প্রথমে **printenv এর আর্গুমেন্ট হিসেবে ভেরিয়েবলের নাম দিয়েছি। পরের পদ্ধতিতে** echo\*\* ব্যবহার করেছি। এবং আর্গুমেন্ট হিসেবে $USER দিয়েছি। সাধারনত কোথাও ভেরিয়েবলের মান ব্যবহার করতে হলে তার নামের আগে '$' চিহ্নসহ ব্যবহার করতে হয়।

এবার কিছু ভেরিয়েবল সম্পর্কে জানা যাক:

| ভেরিয়েবল | অর্থ                                                                                                                                                                                                     |
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| DISPLAY  | আপনি যে ডিসপ্লেতে কাজ করছেন। সাধারনত আমাদের একটাই ডিসপ্লে থাকে। তাই এর নম্বর হয় ":0"।                                                                                                                    |
| EDITOR   | ডিফল্ট টেক্সট এডিটর।                                                                                                                                                                                     |
| SHELL    | ডিফল্ট শেল প্রোগ্রাম।                                                                                                                                                                                    |
| HOME     | আপনার হোম ডিরেক্টরি।                                                                                                                                                                                     |
| LANG     | ডিফল্ট ভাষা সংক্রান্ত তথ্য।                                                                                                                                                                              |
| OLD\_PWD | এখন যে ডিরেক্টরিতে আছেন তার আগে যে ডিরেক্টরিতে ছিলেন।                                                                                                                                                    |
| PAGER    | পেজার। অর্থাৎ ফাইল পড়তে ব্যবহৃত প্রোগ্রাম। সাধারনত এটা হয় less।                                                                                                                                          |
| PATH     | এক্সিকিউটেবল ফাইলের ডিফল্ট ডিরেক্টরিগুলো এখানে কোলোন দিয়ে আলাদা করে দেয়া থাকে। এর সুবিধা হল এইসব ডিরেক্টরির প্রোগ্রামগুলো ব্যবহার করতে প্রোগ্রামের পুরো পাথনেম ব্যবহার না করে শুধু নাম ব্যবহার করলেই হয়। |
| PS1      | প্রম্পট স্ট্রিং ১। আপনার শেল প্রম্পটে কী কী দেখাবে তার এর উপর নির্ভর করে। আমরা পরবর্তীতে এটাকে মোডিফাই করে দেখবো।                                                                                        |
| PWD      | কারেন্ট ওয়ার্কিং ডিরেক্টরি বা বর্তমানে যে ডিরেক্টরিতে আছেন।                                                                                                                                              |
| TERM     | আপনার টার্মিনাল প্রোটোকলের নাম।                                                                                                                                                                          |
| TZ       | টাইমজোন।                                                                                                                                                                                                 |
| USER     | আপনার ইউজারনেম।                                                                                                                                                                                          |
