ในการคำนวณ ตัวแปร เป็นคำที่แสดงถึงคุณค่าที่สามารถเปลี่ยนแปลงได้ คุณใช้ตัวแปรทุกวันในการพูดปกติ แม้ว่าคุณจะไม่ได้มองว่าตัวแปรเหล่านี้เป็นตัวแปรก็ตาม เมื่อคุณพูดว่า "รถของฉัน" คุณกำลังใช้ "รถของฉัน" เป็นตัวแปรที่อ้างอิงถึงรถที่คุณเป็นเจ้าของในขณะนั้น ยี่ห้อและรุ่นจะเปลี่ยนไปตลอดชีวิตของคุณเมื่อคุณแทนที่รถเก่าด้วยรถใหม่ แต่ด้วยการสร้างตัวแปร "รถของฉัน" คุณไม่จำเป็นต้องเดินเตร่เกี่ยวกับประเภทของรถที่คุณกำลังเกิดขึ้น ให้เป็นเจ้าของทุกครั้งที่คุณต้องการอ้างถึงรถของคุณ
ในคอมพิวเตอร์ ตัวแปรจะถูกใช้ในลักษณะเดียวกัน
ตัวอย่างเช่น บุคคลใดก็ตามที่มีบัญชีผู้ใช้บนคอมพิวเตอร์จะมีไดเร็กทอรีหลักที่คอมพิวเตอร์เก็บข้อมูลส่วนบุคคลไว้ แต่ผู้ใช้แต่ละคนมีโฮมไดเร็กทอรีที่แตกต่างกัน (/home/seth
สำหรับเซธ /home/tux
สำหรับ Tux และอื่นๆ สำหรับผู้ใช้แต่ละราย) ดังนั้นเมื่อคุณต้องการอ้างอิงถึงโฮมไดเร็กตอรี่ทั่วไป คุณสามารถใช้ตัวแปร $HOME
เพื่อระบุโฮมไดเร็กตอรี่ของ ปัจจุบัน ผู้ใช้โดยไม่คำนึงถึงชื่อล็อกอินของผู้ใช้
ตัวแปรสภาพแวดล้อมเป็นตัวแปรพิเศษ (เช่น $HOME
) ที่มีข้อมูลเกี่ยวกับเซสชันการเข้าสู่ระบบของคุณ มันถูกเก็บไว้สำหรับเชลล์ระบบเพื่อใช้เมื่อดำเนินการคำสั่ง มีอยู่ไม่ว่าคุณจะใช้ Linux, Mac หรือ Windows ตัวแปรเหล่านี้จำนวนมากถูกกำหนดโดยค่าเริ่มต้นระหว่างการติดตั้งหรือการสร้างผู้ใช้
แม้ว่าตัวแปรสภาพแวดล้อมจะมีผลกับระบบสมัยใหม่ทั้งหมด บทความนี้กล่าวถึงตัวแปรสภาพแวดล้อมใน Bash shell บน Linux, BSD, Mac และ Cygwin โดยเฉพาะ
ทำความเข้าใจกับตัวแปรสภาพแวดล้อม
ตัวแปรสภาพแวดล้อมไม่แตกต่างกันในทางเทคนิคมากกว่าตัวแปร สามารถตั้งค่า เรียกคืน และเคลียร์ได้ด้วยไวยากรณ์เดียวกันกับที่ใช้สำหรับตัวแปร หากคุณไม่คุ้นเคยกับการใช้ตัวแปรใน Bash ให้อ่านตัวแปรของฉันในบทความ Bash ก่อนดำเนินการต่อ
คุณมักไม่ได้ใช้ตัวแปรสภาพแวดล้อมโดยตรง มีการอ้างอิงโดยแต่ละแอปพลิเคชันและภูตตามต้องการ ตัวอย่างเช่น โฮมไดเร็กทอรีของคุณถูกตั้งค่าเป็นตัวแปรสภาพแวดล้อมเมื่อคุณเข้าสู่ระบบ ตัวอย่างเช่น บน Linux คุณสามารถดู HOME ของคุณ เนื้อหาของตัวแปรสภาพแวดล้อมเช่นนี้:
$ echo $HOME
HOME=/home/seth
บน Mac:
$ echo $HOME
HOME=/Users/bogus
บน Windows:
C:\Users\bogus
คุณสามารถดูตัวแปรสภาพแวดล้อมทั้งหมดที่ตั้งค่าไว้ในระบบของคุณด้วย env คำสั่ง รายการมีความยาว ดังนั้นส่งเอาต์พุตผ่าน เพิ่มเติม เพื่อให้อ่านง่ายขึ้น:
$ env | more
TERM=xterm-256color
LESSOPEN=||/usr/bin/lesspipe.sh %s
USER=seth
SUDO_EDITOR=emacs
WWW_HOME=https://mirror.lagoon.nc/pub/slackware/slackware64-current/ChangeLog.txt
VISUAL=emacs
DISPLAY=:0
PS1=$
XDG_DATA_DIRS=/home/seth/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin
GDMSESSION=gnome
MAIL=/var/spool/mail/seth
[...]
ตัวแปรสภาพแวดล้อมมีประโยชน์เมื่อคุณต้องการแทนที่การตั้งค่าเริ่มต้น หรือเมื่อคุณต้องการจัดการการตั้งค่าใหม่ที่ระบบของคุณไม่มีเหตุผลที่จะสร้างด้วยตัวเอง ตัวอย่างเช่น เมื่อคุณพิมพ์คำสั่ง เหตุผลเดียวที่คอมพิวเตอร์ของคุณรู้วิธีค้นหา แอปพลิเคชันที่สอดคล้องกับคำสั่งนั้นคือ PATH ตัวแปรสภาพแวดล้อมบอกว่าจะดูที่ไหน ตัวแปรนี้แสดงรายการไดเรกทอรีที่ถูกต้องสำหรับระบบปฏิบัติการของคุณเพื่อค้นหาคำสั่ง ไม่ว่าคำสั่งนั้นจะเป็น ls หรือ cp หรือแอปพลิเคชันกราฟิก เช่น Firefox หรือ Lutris หรืออย่างอื่น
ตัวแปรสภาพแวดล้อมที่แตกต่างกันถูกใช้โดยระบบที่แตกต่างกัน เส้นทางของคุณ ตัวแปรมีความสำคัญต่อเทอร์มินัลอีมูเลเตอร์ของคุณ ตัวอย่างเช่น Java มีความสำคัญน้อยกว่ามาก (ซึ่งมีเส้นทางของตัวเอง ซึ่งชี้ไปยังไลบรารี Java ที่สำคัญ) อย่างไรก็ตาม USER ตัวแปรถูกใช้โดยหลายระบบเพื่อระบุว่าใครกำลังร้องขอบริการ ตัวอย่างเช่น หากคุณใช้ระบบที่มีผู้ใช้หลายคนและจำเป็นต้องตรวจสอบกล่องจดหมายในเครื่อง คำสั่ง mail ของคุณจะรู้ว่าจะดึงสปูลของอีเมลใดตาม MAIL และ USER ตัวแปร
การตั้งค่าตัวแปรสภาพแวดล้อม
โดยปกติโปรแกรมติดตั้งไม่ว่าจะเป็น dnf บน Fedora ฉลาด บน Ubuntu ชง บน Mac หรือโปรแกรมติดตั้งแบบกำหนดเอง จะอัปเดตตัวแปรสภาพแวดล้อมของคุณสำหรับแอปพลิเคชันใหม่ แม้ว่าบางครั้งเมื่อคุณกำลังติดตั้งบางสิ่งที่อยู่นอกเหนือชุดเครื่องมือที่ตั้งใจไว้สำหรับการแจกจ่ายของคุณ คุณอาจต้องจัดการตัวแปรสภาพแวดล้อมด้วยตัวเอง หรือคุณอาจเลือกที่จะเพิ่มตัวแปรสภาพแวดล้อมเพื่อให้เหมาะกับความต้องการของคุณ หากคุณตัดสินใจว่าต้องการเก็บบางแอปพลิเคชันไว้ใน ถัง โฟลเดอร์ที่อยู่ในโฮมไดเร็กตอรี่ของคุณ จากนั้นคุณต้องเพิ่มไดเร็กทอรีนั้นใน PATH . ของคุณ เพื่อให้ระบบปฏิบัติการของคุณรู้ว่าต้องมองหาแอปพลิเคชันที่จะเรียกใช้เมื่อคุณออกคำสั่ง
ตัวแปรสภาพแวดล้อมชั่วคราว
คุณสามารถเพิ่มตำแหน่งให้กับเส้นทางของคุณได้ในแบบที่คุณสร้างตัวแปรแบบใช้แล้วทิ้ง ใช้งานได้ แต่ตราบใดที่เชลล์ที่คุณใช้เพื่อแก้ไขเส้นทางระบบของคุณยังคงเปิดอยู่ ตัวอย่างเช่น เปิด Bash shell และแก้ไขเส้นทางระบบของคุณ:
$ export PATH=$PATH:/home/seth/bin
ยืนยันผลลัพธ์:
$ echo $PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin:/home/seth/bin
ปิดเซสชั่น:
$ exit
เปิดใหม่และดูที่ เส้นทาง ตัวแปร:
$ echo $PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin
ตัวแปรนี้เปลี่ยนกลับเป็นสถานะเริ่มต้นเนื่องจาก PATH ไม่ได้รับการตั้งค่ากับเชลล์ใหม่แต่ละอัน คุณต้องกำหนดค่าตัวแปรให้โหลดทุกครั้งที่เปิดตัวเชลล์
ตัวแปรสภาพแวดล้อมถาวร
คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมแบบถาวรของคุณเองในไฟล์การกำหนดค่าเชลล์ของคุณ ซึ่งโดยทั่วไปคือ ~/.bashrc . หากคุณเป็นผู้ดูแลระบบที่จัดการผู้ใช้หลายราย คุณยังสามารถตั้งค่าตัวแปรสภาพแวดล้อมในสคริปต์ที่อยู่ใน /etc/profile.d ไดเรกทอรี
ไวยากรณ์สำหรับการตั้งค่าตัวแปรตามไฟล์การกำหนดค่าจะเหมือนกับการตั้งค่าตัวแปรในเชลล์ของคุณ:
export PATH=$PATH:/snap/bin:/home/seth/bin
ปิดเชลล์ปัจจุบัน มิฉะนั้น บังคับให้โหลดการกำหนดค่าที่อัปเดต:
$ . ~/.bashrc
สุดท้าย ให้ดูเส้นทางของระบบอีกครั้ง:
$ echo $PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin:/home/seth/bin
ขณะนี้มีการตั้งค่าอย่างถูกต้องเพื่อรวมไดเร็กทอรีที่กำหนดเองเพิ่มเติมของคุณ
การค้นหาตัวแปรสภาพแวดล้อมอื่นๆ
คุณสามารถสร้างและจัดการตัวแปรสภาพแวดล้อมได้ตามต้องการ และบางแอปพลิเคชันก็ทำเช่นนั้น ข้อเท็จจริงนี้หมายความว่าตัวแปรสภาพแวดล้อมของคุณจำนวนมากไม่ได้ถูกใช้โดยแอปพลิเคชันส่วนใหญ่ของคุณ และหากคุณเพิ่มตัวแปรตามอำเภอใจของคุณเอง ตัวแปรบางตัวอาจไม่สามารถใช้ได้เลย คำถามคือ คุณจะรู้ได้อย่างไรว่าตัวแปรสภาพแวดล้อมใดมีความหมาย
คำตอบอยู่ในเอกสารประกอบการสมัคร ตัวอย่างเช่น หากต้องการค้นหาว่ามีตัวเลือกใดบ้างสำหรับสภาพแวดล้อม Bash ทั่วไป คุณสามารถอ่านเอกสารประกอบของ Bash ในขณะที่หน้า man ของ Bash กล่าวถึงตัวแปรที่สำคัญมากมาย หน้าข้อมูล GNU สำหรับ Bash ก็มีรายการตัวแปรสภาพแวดล้อม Bourne Shell และ Bash ที่มีประโยชน์สองรายการอย่างละเอียดถี่ถ้วน และวิธีการใช้แต่ละตัวแปร
ตัวอย่างเช่น ในรายการหน้าข้อมูล:
'HISTCONTROL'
A colon-separated list of values controlling how commands are saved
on the history list. If the list of values includes 'ignorespace',
lines which begin with a space character are not saved in the
history list. A value of 'ignoredups' causes lines which match the
previous history entry to not be saved. A value of 'ignoreboth' is
shorthand for 'ignorespace' and 'ignoredups'.
[...]
ผลลัพธ์นี้บอกคุณว่า HISTCONTROL ตัวแปรสภาพแวดล้อมจะควบคุมวิธีการนำเสนอประวัติ Bash ของคุณและค่าใดที่คุณสามารถใช้ปรับแต่งประสบการณ์นั้นได้ ในตัวอย่างนี้ ละเว้น ค่าบอกผลลัพธ์ของ ประวัติ คำสั่งละเว้นบรรทัดที่ซ้ำกัน
คุณสามารถทดสอบสิ่งนี้ได้อย่างง่ายดาย ขั้นแรก ออกคำสั่งเดียวกันสองครั้งติดต่อกัน:
$ echo "hello world"
hello world
$ echo "hello world"
hello world
ดูประวัติของคุณหรืออย่างน้อยรายการล่าสุด:
$ history | tail -5
996 man bash
997 info bash
998 echo "hello world"
999 echo "hello world"
1000 history
คุณจะเห็นได้ว่ารายการที่ซ้ำกันมีอยู่จริงในขณะนี้
ตั้งค่าตัวแปรสภาพแวดล้อมใหม่ใน .bashrc . ของคุณ ตามสิ่งที่คุณอ่านในหน้าข้อมูล:
export HISTCONTROL=$HISTCONTROL:ignorespace:ignoredups
บันทึกแล้วโหลดการกำหนดค่าใหม่ของคุณ:
$ source ~/.bashrc
ออกคำสั่งสองครั้งติดต่อกัน:
$ echo "hello once"
hello once
$ echo "hello once"
hello once
ดูรายการล่าสุดในประวัติของคุณ:
$ history | tail -5
1000 history
1001 emacs ~/.bashrc
1002 source ~/.bashrc
1003 echo "hello once"
1004 history
รายการที่ซ้ำกันถูกยุบเป็นรายการเดียวเนื่องจากตัวแปรสภาพแวดล้อมใหม่ของคุณ เช่นเดียวกับหน้าข้อมูลที่ระบุ
การค้นหาตัวแปรสภาพแวดล้อมที่เกี่ยวข้องมักเป็นเรื่องของการอ่านเอกสารสำหรับแอปพลิเคชันที่คุณต้องการส่งผลกระทบ ตัวแปรสภาพแวดล้อมส่วนใหญ่มีความเฉพาะเจาะจงกับสิ่งที่แอปพลิเคชันหนึ่งต้องการเพื่อให้ทำงานได้อย่างราบรื่น สำหรับรายการทั่วไป เอกสารประกอบของเชลล์ของคุณเป็นที่ที่เหมาะสมในการดู หากคุณเขียนสคริปต์หรือแอปพลิเคชันที่ต้องการตัวแปรสภาพแวดล้อมใหม่ อย่าลืมกำหนดตัวแปรเหล่านั้นในเอกสารประกอบของคุณเอง