บ้าน - หน้าต่าง
Linux ตัวแปรสภาพแวดล้อมทั้งหมดของกระบวนการที่ทำงานอยู่ เอ็ม. การ์เรลส์

ต้นฉบับ: พื้นฐาน Linux
ผู้เขียน : พอล คอบเบาต์
วันที่เผยแพร่: 16 ตุลาคม 2014
แปล: อ. ภานิน
วันที่แปล: 13 ธันวาคม 2557

บทที่ 12 ตัวแปรเชลล์

ในบทนี้ เราจะได้เรียนรู้วิธีทำงานกับตัวแปรสภาพแวดล้อมโดยใช้เชลล์คำสั่ง โดยทั่วไปแล้วตัวแปรเหล่านี้จำเป็นสำหรับแอปพลิเคชันในการทำงาน

สัญลักษณ์ดอลลาร์ ($)

สัญลักษณ์สำคัญอีกประการหนึ่งที่เชลล์ตีความคือสัญลักษณ์ดอลลาร์ $ เชลล์คำสั่งจะค้นหาตัวแปรสภาพแวดล้อมที่มีชื่อที่สอดคล้องกับบรรทัดหลังเครื่องหมายดอลลาร์ และแทนที่สัญลักษณ์นั้นและชื่อตัวแปรด้วยค่าของตัวแปรนั้น (หรือไม่มีค่าเลยหากไม่มีตัวแปร)

ด้านล่างนี้เป็นตัวอย่างบางส่วนของการใช้ตัวแปร $HOSTNAME, $USER, $UID, $SHELL และ $HOME

$ echo นี่คือเชลล์ $SHELL นี่คือ /bin/bash shell $ echo นี่คือ $SHELL เชลล์ที่ใช้บนคอมพิวเตอร์ $HOSTNAME นี่คือ /bin/bash เชลล์ที่ใช้บนคอมพิวเตอร์ RHELv4u3.localdomain $ echo ID ผู้ใช้ $USER เท่ากับ $UID ID ผู้ใช้ paul เท่ากับ $500 echo โฮมไดเร็กตอรี่ของฉันคือ $HOME โฮมไดเร็กตอรี่ของฉันคือ /home/paul

ความละเอียดอ่อนของตัวพิมพ์

ตัวอย่างนี้แสดงให้เห็นว่าชื่อตัวแปรเชลล์คำนึงถึงขนาดตัวพิมพ์!

$ echo สวัสดี $USER สวัสดีพอล $ echo สวัสดี $user สวัสดี

การสร้างตัวแปร

โปรดทราบว่าเครื่องหมายคำพูดคู่ยังอนุญาตให้มีการขยายตัวแปรในบรรทัดคำสั่ง ในขณะที่เครื่องหมายคำพูดเดี่ยวจะป้องกันการขยายดังกล่าว

$ MyVar=555 $ echo $MyVar 555 $ echo "$MyVar" 555 $ echo "$MyVar" $MyVar

bash shell จะแทนที่ตัวแปรด้วยค่าของมันในบรรทัดที่มีเครื่องหมายคำพูดคู่ แต่จะไม่ทำเช่นนั้นในบรรทัดที่มีเครื่องหมายคำพูดเดี่ยว

paul@laika:~$ city=Burtonville paul@laika:~$ echo "ตอนนี้เราอยู่ใน $city" ตอนนี้เราอยู่ในเมืองเบอร์ตันวิลล์ paul@laika:~$ echo "ตอนนี้เราอยู่ใน $city" ตอนนี้เราอยู่ใน $city ตั้งค่าคำสั่งคุณสามารถใช้คำสั่ง set เพื่อแสดงรายการตัวแปรสภาพแวดล้อม ใน

ระบบอูบุนตู

และคำสั่ง Debian set จะแสดงรายการฟังก์ชันเชลล์หลังรายการตัวแปรเชลล์ด้วย ดังนั้นเพื่อทำความคุ้นเคยกับองค์ประกอบทั้งหมดของรายการตัวแปรสภาพแวดล้อมเมื่อทำงานกับระบบเหล่านี้ ขอแนะนำให้ใช้ชุด | มากกว่า.

คำสั่งยกเลิกการตั้งค่า

คุณควรใช้คำสั่ง unset เพื่อลบตัวแปรออกจากสภาพแวดล้อมเชลล์ของคุณ $ MyVar=8472 $ echo $MyVar 8472 $ ไม่ได้ตั้งค่า MyVar $ echo $MyVar $ตัวแปรสภาพแวดล้อม $PS1

ตัวแปรสภาพแวดล้อม $PS1 กำหนดรูปแบบคำทักทายสำหรับเชลล์ของคุณ เมื่อป้อนสตริงรูปแบบ คุณสามารถใช้แบ็กสแลชเพื่อหลีกอักขระพิเศษ เช่น \u สำหรับชื่อผู้ใช้ หรือ \w สำหรับไดเร็กทอรีการทำงาน หน้า man ของ bash shell จัดเตรียมไว้

รายการทั้งหมด อักขระพิเศษในตัวอย่างด้านล่าง เราเปลี่ยนค่าของตัวแปรสภาพแวดล้อม $PS1 หลายครั้ง

ตัวแปรสภาพแวดล้อม $PATH

ตัวแปรสภาพแวดล้อม $PATH ตั้งค่าไดเร็กทอรี ระบบไฟล์ซึ่งเชลล์ค้นหาไฟล์ไบนารีที่จำเป็นในการรันคำสั่ง (เว้นแต่คำสั่งนั้นเป็นบิวด์อินหรือแสดงโดยนามแฝงคำสั่ง) ตัวแปรนี้มีรายการเส้นทางไดเร็กทอรีที่คั่นด้วยอักขระโคลอน

[$ echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:

เชลล์คำสั่งจะไม่ค้นหาไดเร็กทอรีปัจจุบันเพื่อหาไบนารีที่ปฏิบัติการได้ (ฟังก์ชันการค้นหาไฟล์ปฏิบัติการในไดเร็กทอรีปัจจุบันเป็นกลไกที่ง่ายที่สุดสำหรับการเข้าถึงข้อมูลที่จัดเก็บไว้ในคอมพิวเตอร์ที่ใช้ PC-DOS โดยไม่ได้รับอนุญาต) หากคุณต้องการให้เชลล์คำสั่งค้นหาไฟล์ปฏิบัติการในไดเร็กทอรีปัจจุบัน คุณควรเพิ่มสัญลักษณ์ ที่ท้ายบรรทัดซึ่งเป็นค่าของตัวแปร $PATH ของเชลล์ของคุณ

$พาธ=$พาธ:. $ echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:. -

ค่าของตัวแปร $PATH ของเชลล์ของคุณอาจแตกต่างกันหากคุณใช้คำสั่ง su แทนคำสั่ง su - เนื่องจากคำสั่งหลังอนุญาตให้ใช้ค่าตัวแปรสภาพแวดล้อมของผู้ใช้เป้าหมายเพิ่มเติมได้ ตัวอย่างเช่น รายการไดเร็กทอรีสำหรับผู้ใช้รูท ซึ่งแสดงด้วยค่าของตัวแปร $PATH โดยปกติจะรวมไดเร็กทอรี /sbin ด้วย

รหัสผ่าน $ su: # echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin # exit $ su - รหัสผ่าน: # echo $PATH /usr/local/sbin:/usr/ ท้องถิ่น/bin:/sbin:/bin:/usr/sbin:/usr/bin: #

คำสั่ง env คำสั่ง env เมื่อใช้โดยไม่มีพารามิเตอร์ จะแสดงรายการตัวแปรสภาพแวดล้อมที่ส่งออก ความแตกต่างระหว่างคำสั่งนี้และคำสั่ง set พร้อมพารามิเตอร์คือ คำสั่ง set แสดงรายการตัวแปรสภาพแวดล้อมทั้งหมด รวมถึงตัวแปรเหล่านั้นที่ไม่ได้เอ็กซ์พอร์ตไปยังเชลล์ลูกนอกจากนี้ คำสั่ง env ยังสามารถใช้เพื่อเรียกใช้เชลล์ "บริสุทธิ์" (เชลล์ที่ไม่มีการสืบทอดสภาพแวดล้อมใดๆ ) คำสั่ง env -i อนุญาตให้คุณล้างสภาพแวดล้อมของเชลล์ลูก

คุณสามารถใช้คำสั่ง env เพื่อตั้งค่าของตัวแปร $LANG หรือตัวแปรสภาพแวดล้อมอื่นๆ ของอินสแตนซ์ bash shell เดียวภายในคำสั่งเดียว ในตัวอย่างด้านล่าง โอกาสนี้ใช้เพื่อแสดงอิทธิพลของค่าของตัวแปร $LANG ต่อการทำงานของกลไกการค้นหารูปแบบไฟล์ (เพื่อให้ได้ ข้อมูลเพิ่มเติมโอ กลไกนี้คุณควรอ้างอิงถึงบทเกี่ยวกับการค้นหาไฟล์โดยใช้รูปแบบ)

$ env LANG=C ทุบตี -c "ไฟล์ ls" Filea Fileb $ env LANG=en_US.UTF-8 ทุบตี -c "ไฟล์ ls" Filea FileA Fileb FileB $

คำสั่งส่งออก

คุณสามารถส่งออกตัวแปรเชลล์ไปยังเชลล์อื่นได้โดยใช้คำสั่งส่งออก ในตัวอย่างด้านล่าง คำสั่งนี้จะส่งออกตัวแปรสภาพแวดล้อมไปยังเชลล์ย่อย

$ var3=สาม $ var4=สี่ $ ส่งออก var4 $ echo $var3 $var4 สามสี่ $ ทุบตี $ echo $var3 $var4 สี่

อย่างไรก็ตาม เมื่อใช้คำสั่งนี้ ตัวแปรจะไม่ถูกส่งออกไปยังเชลล์คำสั่งพาเรนต์ (ตัวอย่างก่อนหน้านี้มีต่อด้านล่าง)

$ ส่งออก var5=ห้า $ echo $var3 $var4 $var5 สี่ห้า $ ออก ทางออก $ echo $var3 $var4 $var5 สามสี่ $

การจำกัดตัวแปร

จนถึงขณะนี้ เราได้เห็นแล้วว่า bash shell ตีความตัวแปรที่เริ่มต้นด้วยเครื่องหมายดอลลาร์ และดำเนินต่อไปจนกระทั่งอักขระตัวแรกที่ไม่ใช่ตัวอักษรและตัวเลขซึ่งไม่ใช่ขีดล่างปรากฏขึ้น ในบางสถานการณ์ลักษณะการทำงานนี้อาจเป็นปัญหาได้ เพื่อแก้ปัญหานี้ สามารถใช้วงเล็บปีกกาได้ในลักษณะดังแสดงในตัวอย่างด้านล่าง

$ prefix=Super $ echo สวัสดี $prefixman และ $prefixgirl สวัสดี และ $ echo สวัสดี $(คำนำหน้า)man และ $(prefix)girl สวัสดี Superman และ Supergirl $

แบบฝึกหัด: ตัวแปรเชลล์

2. สร้างคำตอบแบบแปรผันที่มีค่าเท่ากับ 42

3. คัดลอกค่าของตัวแปร $LANG ไปยังค่าของตัวแปร $MyLANG

4. แสดงรายการตัวแปรเชลล์ที่ใช้งานอยู่ในปัจจุบัน

5. แสดงรายการตัวแปรเชลล์ที่ส่งออกทั้งหมด

6. มีข้อมูลเกี่ยวกับตัวแปรของคุณอยู่ในเอาต์พุตของคำสั่ง env และ set หรือไม่?

7. ทำลายตัวแปรคำตอบของคุณ

8. สร้างตัวแปรสองตัวและส่งออกตัวแปรตัวใดตัวหนึ่ง

9. พิมพ์ค่าของตัวแปรที่ส่งออกในเชลล์คำสั่งแบบโต้ตอบลูก

10. สร้างตัวแปรและกำหนดค่า "Dumb" ให้กับตัวแปร จากนั้นสร้างตัวแปรอื่นที่มีค่า "do" ในลักษณะเดียวกัน ใช้คำสั่ง echo และตัวแปรทั้งสองที่สร้างขึ้นเพื่อพิมพ์คำว่า "Dumbledore"

11. ค้นหารายการอักขระควบคุมที่ใช้ Escape แบ็กสแลชในหน้า man ของ bash shell เพิ่มอักขระควบคุมให้กับตัวแปร PS1 เพื่อแสดงเวลาในคำทักทายของเชลล์

ขั้นตอนการปฏิบัติที่ถูกต้อง: ตัวแปรเชลล์

1. ใช้คำสั่ง echo เพื่อพิมพ์สตริง "Hello" ตามด้วยชื่อของคุณ (ใช้ตัวแปร bash shell!)

ตัวแปรสภาพแวดล้อมใน Linux เป็นตัวแปรพิเศษที่กำหนดโดยเชลล์และใช้โดยโปรแกรมขณะรันไทม์ สามารถกำหนดได้โดยระบบและผู้ใช้ ระบบ ตัวแปรสภาพแวดล้อมระบบ Linux ถูกกำหนดโดยระบบและใช้โดยโปรแกรมระดับระบบ

ตัวอย่างเช่น คำสั่ง PWD ใช้ตัวแปรระบบเพื่อเก็บไดเร็กทอรีการทำงานก่อนหน้า ตัวแปรสภาพแวดล้อมผู้ใช้ถูกกำหนดโดยผู้ใช้ สำหรับเชลล์ปัจจุบัน ไม่ว่าจะชั่วคราวหรือถาวร แนวคิดทั้งหมดของการเพิ่มและการลบตัวแปรเชลล์เกี่ยวข้องกับหลายไฟล์ คำสั่ง และเชลล์ที่แตกต่างกัน

โดยทั่วไปแล้ว ตัวแปรสภาพแวดล้อมสามารถมีได้สามประเภท:

1. ตัวแปรสภาพแวดล้อมท้องถิ่น

ตัวแปรเหล่านี้ถูกกำหนดไว้สำหรับเซสชันปัจจุบันเท่านั้น พวกเขาจะถูกลบอย่างถาวรหลังจากสิ้นสุดเซสชั่นไม่ว่าจะเป็น การเข้าถึงระยะไกลหรือเทอร์มินัลอีมูเลเตอร์ พวกเขาไม่ได้จัดเก็บไว้ในไฟล์ใด ๆ แต่ถูกสร้างและลบโดยใช้คำสั่งพิเศษ

2. ตัวแปรเชลล์แบบกำหนดเอง

ตัวแปรเชลล์เหล่านี้ใน Linux ถูกกำหนดไว้สำหรับผู้ใช้เฉพาะ และจะถูกโหลดทุกครั้งที่ผู้ใช้เข้าสู่ระบบโดยใช้เทอร์มินัลท้องถิ่นหรือเชื่อมต่อจากระยะไกล โดยทั่วไปตัวแปรดังกล่าวจะถูกจัดเก็บไว้ในไฟล์การกำหนดค่า: .bashrc, .bash_profile, .bash_login, .profile หรือไฟล์อื่น ๆ ที่อยู่ในไดเร็กทอรีผู้ใช้

3. ตัวแปรสภาพแวดล้อมของระบบ

ตัวแปรเหล่านี้มีอยู่ทั่วทั้งระบบสำหรับผู้ใช้ทุกคน มีการโหลดเมื่อเริ่มต้นระบบจาก ไฟล์ระบบการกำหนดค่า: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc

ไฟล์การกำหนดค่าตัวแปรสภาพแวดล้อม Linux

เราจะมาดูเรื่องต่างๆ กันแบบสั้นๆ กัน ไฟล์การกำหนดค่าที่ระบุไว้ข้างต้น ซึ่งใช้ในการตั้งค่าตัวแปรสภาพแวดล้อมสำหรับทั้งระบบหรือผู้ใช้เฉพาะ

.bashrc

นี่คือไฟล์ตัวแปรเฉพาะผู้ใช้ โหลดทุกครั้งที่ผู้ใช้สร้างเซสชันเทอร์มินัล กล่าวคือ เปิดเทอร์มินัลใหม่ ตัวแปรสภาพแวดล้อมทั้งหมดที่สร้างในไฟล์นี้จะมีผลทุกครั้งที่เริ่มเซสชันเทอร์มินัลใหม่

.bash_profile

ตัวแปรเหล่านี้จะมีผลทุกครั้งที่ผู้ใช้เชื่อมต่อระยะไกลผ่าน SSH หากไฟล์นี้หายไป ระบบจะค้นหา .bash_login หรือ .profile

/etc/สภาพแวดล้อม

ไฟล์นี้ใช้สำหรับสร้าง แก้ไข และลบตัวแปรสภาพแวดล้อมในระดับระบบ ตัวแปรสภาพแวดล้อมที่สร้างในไฟล์นี้จะพร้อมใช้งานสำหรับทั้งระบบ สำหรับผู้ใช้แต่ละราย และแม้กระทั่งเมื่อเชื่อมต่อจากระยะไกล

/etc/bash.bashrc

ระบบ bashrc ไฟล์นี้จะถูกดำเนินการสำหรับผู้ใช้แต่ละราย ทุกครั้งที่เขาสร้างเซสชันเทอร์มินัลใหม่ ใช้งานได้กับผู้ใช้ภายในเครื่องเท่านั้น เมื่อเชื่อมต่อผ่านอินเทอร์เน็ต ตัวแปรดังกล่าวจะไม่ปรากฏให้เห็น

/etc/profile

โปรไฟล์ไฟล์ระบบ ตัวแปรทั้งหมดจากไฟล์นี้จะพร้อมใช้งานสำหรับผู้ใช้ทุกคนในระบบเฉพาะในกรณีที่เขาเข้าสู่ระบบจากระยะไกล แต่จะไม่สามารถใช้งานได้เมื่อสร้างเซสชันเทอร์มินัลในเครื่อง กล่าวคือ หากคุณเพียงแค่เปิดเทอร์มินัล

ตัวแปรสภาพแวดล้อม Linux ทั้งหมดที่สร้างขึ้นโดยใช้ไฟล์เหล่านี้สามารถลบออกได้ง่ายๆ ด้วยการลบออกจากที่นั่น หลังจากการเปลี่ยนแปลงแต่ละครั้งเท่านั้น คุณจะต้องออกจากระบบและกลับเข้าสู่ระบบใหม่ หรือเรียกใช้คำสั่งนี้:

ชื่อไฟล์ต้นฉบับ

การเพิ่มตัวแปรผู้ใช้และสภาพแวดล้อมระบบใน Linux

ตอนนี้คุณรู้ทฤษฎีเพียงเล็กน้อยแล้ว เรามาฝึกฝนกันต่อ ตัวแปรสภาพแวดล้อมท้องถิ่นใน Linux สามารถสร้างได้ด้วยคำสั่งต่อไปนี้:

var=ค่า
$ ส่งออก var=value

ตัวแปรเหล่านี้จะพร้อมใช้งานสำหรับเซสชันเทอร์มินัลปัจจุบันเท่านั้น

มีคำสั่งหลายคำสั่งที่คุณสามารถใช้เพื่อลบตัวแปรสภาพแวดล้อม:

1. การใช้สภาพแวดล้อม

ตามค่าเริ่มต้น คุณสามารถใช้ env เพื่อดูตัวแปรสภาพแวดล้อมที่ตั้งค่าไว้ทั้งหมดได้ แต่ด้วยตัวเลือก -i จะทำให้คุณสามารถลบตัวแปรเชลล์ทั้งหมดชั่วคราวและดำเนินการคำสั่งโดยไม่มีตัวแปร

คำสั่ง env –i

Var คือตัวแปรใดๆ ที่คุณต้องการส่งผ่านไปยังคำสั่งนี้

คำสั่งนี้จะสตาร์ทเชลล์โดยไม่มีตัวแปรสภาพแวดล้อมใดๆ เลย:

หลังจากเปิดตัวสภาพแวดล้อมดังกล่าวแล้ว จะไม่มีตัวแปรให้ใช้งาน แต่หลังจากออกแล้ว ทุกอย่างจะกลับสู่ตำแหน่งเดิม

2. การใช้การไม่ตั้งค่า

นี่เป็นอีกวิธีหนึ่งในการลบตัวแปรสภาพแวดล้อม Linux Unset จะลบตัวแปรตามชื่อจนกระทั่งสิ้นสุดเซสชันปัจจุบัน:

ยกเลิกการตั้งค่า Variable_name

3. ตั้งค่าตัวแปรเป็น ""

นี่เป็นวิธีที่ง่ายที่สุดในการลบตัวแปรสภาพแวดล้อมใน Linux โดยการตั้งค่าตัวแปรให้ว่าง คุณจะลบตัวแปรดังกล่าวในช่วงที่เหลือของเซสชันปัจจุบัน

หมายเหตุ: เมื่อใช้วิธีการเหล่านี้ คุณสามารถเปลี่ยนค่าของระบบหรือตัวแปรผู้ใช้ได้ แต่จะเกี่ยวข้องเท่านั้น เซสชันปัจจุบัน.

การสร้างตัวแปรสภาพแวดล้อมของผู้ใช้และระบบ

ในส่วนนี้ เราจะดูวิธีตั้งค่าและลบตัวแปรระบบและผู้ใช้ ไม่เพียงแต่สำหรับเซสชันปัจจุบันเท่านั้น แต่ยังเพื่อให้ผลกระทบยังคงอยู่หลังจากการรีบูต

1. ตั้งค่าและลบตัวแปรโลคัลใน Linux

มาสร้างตัวแปรท้องถิ่น VAR และตั้งค่าเป็นค่าใดก็ได้ จากนั้นยกเลิกการตั้งค่าและตรวจสอบให้แน่ใจว่าได้ลบแล้ว:

VAR1="แพ้"
$ เอคโค $VAR1
$ยกเลิกการตั้งค่า VAR1
$ เอคโค $VAR1

อีกวิธีหนึ่งในการสร้างตัวแปรคือใช้คำสั่งส่งออก มาลบมันโดยกำหนดค่าว่าง:

ส่งออก VAR = "ขาดทุน"
$ เอคโค $VAR
$วาร์=
$ เอคโค $VAR

ตอนนี้เรามาสร้างตัวแปร VAR2 และตั้งค่าของมันกันดีกว่า จากนั้นลบตัวแปรโลคอลทั้งหมดชั่วคราวโดยรัน env -i มันจะเริ่มต้นเชลล์โดยไม่มีตัวแปรใดๆ หลังจากเข้าสู่ทางออกแล้ว ตัวแปรทั้งหมดจะถูกกู้คืน

VAR2="แพ้"
$ เอคโค $VAR2
$ env -i ทุบตี
$ เอคโค $VAR2

การตั้งค่าและการลบตัวแปรผู้ใช้

แก้ไขไฟล์ .bashrc ในโฮมไดเร็กตอรี่ของคุณโดยเพิ่มคำสั่งส่งออกเพื่อส่งออกตัวแปรที่ต้องการ จากนั้นรันคำสั่ง source เพื่อใช้การเปลี่ยนแปลง ตัวอย่างเช่น มาสร้างตัวแปร CD:

เพิ่มบรรทัดนี้ (o จากนั้นวาง จากนั้น Esc และ :wq):

ส่งออก CD = "นี่คือบ้านที่หายไป"

ตอนนี้ยังคงอัปเดตการกำหนดค่า:

แหล่งที่มา.bashrc
$เอคโค $ซีดี

หากต้องการลบตัวแปรนี้ เพียงลบออกจาก .bashrc

ตอนนี้เรามาเพิ่มตัวแปรสภาพแวดล้อมโดยใช้ .bash_profile ดังที่คุณทราบแล้วตัวแปรนี้จะใช้ได้เฉพาะในระหว่างการเข้าสู่ระบบระยะไกลเท่านั้น:

vi .bash_profile

เพิ่มบรรทัด:

ส่งออก VAR2="นี่คือบ้านที่หายไป"

และรันคำสั่งเหล่านี้เพื่อใช้การเปลี่ยนแปลงและตรวจสอบว่ามีการเพิ่มตัวแปรแล้ว:

แหล่งที่มา.bash_profile
$ เอคโค $VAR2

ตัวแปรไม่พร้อมใช้งานเนื่องจากคุณได้สร้างเซสชันเทอร์มินัลในเครื่องแล้ว ตอนนี้เชื่อมต่อผ่าน ssh:

ผู้ใช้ ssh@localhost
$ เอคโค $VAR2

คุณสามารถลบตัวแปรสภาพแวดล้อมนี้ได้ในลักษณะเดียวกับในกรณีก่อนหน้าโดยการลบออกจากไฟล์

ความคิดเห็น: ตัวแปรเหล่านี้พร้อมใช้งานเสมอ แต่ไม่ใช่สำหรับผู้ใช้ทุกคน

การตั้งค่าและการลบตัวแปรสภาพแวดล้อมของระบบ

มาสร้างตัวแปรที่ผู้ใช้ทุกคนสามารถใช้ได้ เซสชันเทอร์มินัลยกเว้นอันที่ถูกลบโดยเพิ่มไปที่ /etc/bash.profile:

vi /etc/bash.profile

ส่งออก VAR = "นี่คือตัวแปรทั้งระบบ"

จากนั้นเราอัปเดต:

แหล่งที่มา /etc/bash.bashrc

ตอนนี้ตัวแปรนี้พร้อมใช้งานสำหรับผู้ใช้ทุกคน ในทุกเทอร์มินัล:

สะท้อน $VAR
$sudo su
$ เอคโค $VAR
$ซู -
$ เอคโค $VAR

หากคุณต้องการให้ตัวแปรสภาพแวดล้อมพร้อมใช้งานสำหรับผู้ใช้ทั้งหมดที่เชื่อมต่อกับเครื่องนี้แบบรีโมต ให้แก้ไขไฟล์ /etc/profile:

ส่งออก VAR1="นี่คือตัวแปรทั้งระบบสำหรับเซสชันระยะไกลเท่านั้น"

อัปเดตการกำหนดค่าและตรวจสอบความพร้อมใช้งานของตัวแปร โดยจะพร้อมใช้งานจากระยะไกลเท่านั้น:

แหล่งที่มา /etc/profile
$ เอคโค $VAR1

หากคุณต้องการเพิ่มตัวแปรสภาพแวดล้อมใน Linux เพื่อให้สามารถเข้าถึงได้ทั้งจากระยะไกลและสำหรับเซสชันในเครื่อง ให้ส่งออกไปที่ /etc/environment:

vi /etc/environment.vi

ส่งออก VAR12="ฉันพร้อมให้บริการทุกที่"

เราตรวจสอบ:

แหล่งที่มา /etc/environment
$ เอคโค $VAR12
$sudo su
$ เอคโค $VAR12
$ ออก
$ssh โลคัลโฮสต์
$ เอคโค $VAR12

แนวคิดของพารามิเตอร์ในเชลล์ ทุบตีคล้ายกับแนวคิดของตัวแปรในภาษาโปรแกรมทั่วไป ชื่อพารามิเตอร์ (หรือตัวระบุ) ​​สามารถเป็นคำที่ประกอบด้วยอักขระตัวอักษร ตัวเลข และขีดล่าง (เฉพาะอักขระตัวแรกของคำเท่านั้นที่ไม่สามารถเป็นตัวเลขได้) ตัวเลข หรืออักขระพิเศษตัวใดตัวหนึ่งต่อไปนี้: * , @ , # , ? , - (ยัติภังค์), $ , ! , 0 , _ (ขีดเส้นใต้).

พารามิเตอร์ถูกกล่าวว่าถูกตั้งค่าหรือตั้งค่าหากมีการกำหนดค่าให้กับพารามิเตอร์นั้น ค่านี้อาจเป็นสตริงว่างก็ได้ ในการแสดงค่าของพารามิเตอร์ ให้ใช้สัญลักษณ์ $ ก่อนชื่อของเขา ใช่ครับ ทีม

$ ชื่อสะท้อน

จะแสดงคำบนหน้าจอ ชื่อและทีมงาน

$ เสียงสะท้อน $ ชื่อ

จะส่งกลับค่าของตัวแปรชื่อ (ถ้ามีการตั้งค่าไว้แน่นอน)

5.6.1 พารามิเตอร์ที่หลากหลาย

พารามิเตอร์แบ่งออกเป็นสามคลาส: พารามิเตอร์ตำแหน่ง พารามิเตอร์พิเศษ(ชื่อที่เป็นอักขระพิเศษที่เพิ่งระบุไว้) และ ตัวแปรเชลล์.

ชื่อ (ตัวระบุ) พารามิเตอร์ตำแหน่งประกอบด้วยตัวเลขหนึ่งหลักขึ้นไป (ไม่ใช่ศูนย์ตัวเดียว) ค่าพารามิเตอร์ตำแหน่งคืออาร์กิวเมนต์ที่ได้รับเมื่อเชลล์เริ่มทำงาน (อาร์กิวเมนต์แรกคือค่าของพารามิเตอร์ตำแหน่ง 1 เป็นต้น) คุณสามารถเปลี่ยนค่าของพารามิเตอร์ตำแหน่งได้โดยใช้คำสั่งในตัว ชุด- ค่าของพารามิเตอร์เหล่านี้ยังเปลี่ยนแปลงในขณะที่เชลล์กำลังดำเนินการฟังก์ชันใดฟังก์ชันหนึ่ง (ซึ่งจะกล่าวถึงด้านล่างใน ส่วน 5.8).

พารามิเตอร์พิเศษเป็นรูปแบบการทดแทน (ทดแทน) โดยมีการดำเนินการดังนี้

ตารางที่ 5.2.พารามิเตอร์พิเศษ

พารามิเตอร์

กฎการเปลี่ยนตัว

แทนที่ด้วยพารามิเตอร์ตำแหน่งโดยเริ่มจากอันแรก หากการแทนที่เกิดขึ้นภายในเครื่องหมายคำพูดคู่ พารามิเตอร์นี้จะถูกแทนที่ด้วยคำเดียวที่ประกอบด้วยพารามิเตอร์ตำแหน่งทั้งหมดที่คั่นด้วยอักขระตัวแรกของตัวแปร IFS พิเศษ (ตามที่อธิบายด้านล่าง) นั่นคือ ``$*"" เทียบเท่ากับ ``$1c$2c..." โดยที่ c คืออักขระตัวแรกในค่าของตัวแปร IFS หาก IFS ถูกตั้งค่าเป็นว่างหรือไม่ได้ตั้งค่าไว้ พารามิเตอร์จะถูกคั่นด้วยช่องว่าง

แทนที่ด้วยพารามิเตอร์ตำแหน่งโดยเริ่มจากอันแรก หากมีการแทนที่ด้วยเครื่องหมายคำพูดคู่ แต่ละพารามิเตอร์จะถูกแทนที่ด้วยคำที่แยกจากกัน ดังนั้น ``$@"" จึงเทียบเท่ากับ ""$1"" ""$2"" ... หากไม่มีพารามิเตอร์ตำแหน่ง ก็จะไม่มีการกำหนดค่า (พารามิเตอร์ @ จะถูกลบออกอย่างง่ายดาย)

แทนที่ด้วยค่าทศนิยมของจำนวนพารามิเตอร์ตำแหน่ง

แทนที่ด้วยสถานะทางออกของช่องโปรแกรมเบื้องหน้าล่าสุดที่ทำงานอยู่

(ยัติภังค์)

แทนที่ด้วยชุดค่าสถานะปัจจุบันที่กำหนดโดยใช้คำสั่งบิวด์อิน ชุดหรือเมื่อสตาร์ทเชลล์เอง

แทนที่ด้วยตัวระบุกระบวนการ (P ID) ของเชลล์

แทนที่ด้วยตัวระบุกระบวนการ (P ID) ของคำสั่งพื้นหลังที่ดำเนินการล่าสุด (ดำเนินการแบบอะซิงโครนัส)

แทนที่ด้วยชื่อของเชลล์หรือสคริปต์ที่จะรัน ถ้า ทุบตีรันเพื่อรันแบตช์ไฟล์ $0 คือชื่อของไฟล์ มิฉะนั้นค่านี้จะเท่ากับเส้นทางแบบเต็มไปยังเชลล์

(ขีดเส้นใต้)

แทนที่ด้วยอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้าที่ดำเนินการ (หากนี่คือพารามิเตอร์หรือตัวแปร ค่าของมันจะถูกทดแทน)

พารามิเตอร์พิเศษที่แสดงอยู่ในตารางด้านบนแตกต่างกันตรงที่สามารถอ้างอิงได้เท่านั้น คุณไม่สามารถกำหนดค่าให้กับพวกเขาได้

ตัวแปรจากมุมมองของเชลล์ มันเป็นพารามิเตอร์ที่แสดงด้วยชื่อ ค่าถูกกำหนดให้กับตัวแปรโดยใช้ตัวดำเนินการต่อไปนี้:

$ชื่อ=มูลค่า

ที่ไหน ชื่อคือชื่อของตัวแปร และ ค่า— ค่าที่กำหนดให้กับมัน (อาจเป็นสตริงว่าง) ชื่อตัวแปรประกอบด้วยตัวเลขและตัวอักษรเท่านั้น และไม่สามารถขึ้นต้นด้วยตัวเลขได้ ค่าสามารถเป็นข้อความใดก็ได้ หากค่ามีอักขระพิเศษ จะต้องอยู่ในเครื่องหมายคำพูด ค่าที่กำหนดไม่มีเครื่องหมายคำพูดเหล่านี้แน่นอน หากตั้งค่าตัวแปรไว้ ก็สามารถลบออกได้โดยใช้คำสั่งเชลล์บิวด์อิน ไม่ได้ตั้งค่า.

ชุดของตัวแปรเชลล์ที่ตั้งค่าทั้งหมดที่มีค่าที่กำหนดเรียกว่าสภาพแวดล้อมหรือสภาพแวดล้อมของเชลล์ คุณสามารถดูได้โดยใช้คำสั่ง ชุดไม่มีพารามิเตอร์ (บางทีคุณควรจัดระเบียบไปป์ไลน์ "ตั้ง | น้อยลง"- ผลลัพธ์ของคำสั่งนี้จะแสดงรายการตัวแปรสภาพแวดล้อมทั้งหมดตามลำดับตัวอักษร หากต้องการดูค่าของตัวแปรเฉพาะตัวใดตัวหนึ่ง คุณสามารถทำได้แทนคำสั่ง ชุด(ในผลลัพธ์ที่คุณยังสามารถค้นหาและค้นหาตัวแปรที่ต้องการได้) คุณสามารถใช้คำสั่งได้

$ เสียงสะท้อน $ ชื่อ

(แต่ในกรณีนี้คุณต้องทราบชื่อของตัวแปรที่คุณสนใจ)

ในบรรดาตัวแปรที่คุณจะเห็นในเอาต์พุตคำสั่งได้แก่ ชุดมีตัวแปรที่น่าสนใจอยู่บ้าง ตัวอย่างเช่น ให้ความสนใจกับตัวแปร RANDOM หากคุณรันคำสั่งหลายครั้งติดต่อกัน

$ เสียงสะท้อน $ สุ่ม

คุณจะได้รับค่าใหม่ทุกครั้ง ความจริงก็คือตัวแปรนี้ส่งคืนจำนวนเต็มแบบสุ่มจากช่วง 0 - 32,768

5.6.2 เชลล์พร้อมท์

มีชื่อตัวแปรที่สำคัญมากตัวหนึ่ง PS1- ตัวแปรนี้ระบุประเภทของคำเชิญนั้น ทุบตีเอาต์พุตเมื่อกำลังรอให้ผู้ใช้ป้อนคำสั่งถัดไป ตามค่าเริ่มต้น ตัวแปรนี้จะถูกตั้งค่าเป็น "\s-\v\$ " จริงๆ แล้วอิน. ทุบตีมีคำเชิญสี่รายการที่ใช้ในสถานการณ์ที่แตกต่างกัน ตัวแปร PS1ระบุประเภทของพร้อมต์ที่ออกเมื่อเชลล์กำลังรอคำสั่งที่จะป้อน พรอมต์รองที่ระบุโดยตัวแปร พีเอส2ปรากฏขึ้นเมื่อเชลล์กำลังรอให้ผู้ใช้ป้อนข้อมูลเพิ่มเติมที่จำเป็นสำหรับการดำเนินการคำสั่งหรือโปรแกรมที่รันอยู่ต่อไป ตัวแปรเริ่มต้น พีเอส2เรื่อง" >" - คุณอาจเห็นพรอมต์นี้แล้วเมื่อคุณรันคำสั่ง แมวเพื่อป้อนข้อมูลจากแป้นพิมพ์ลงในไฟล์ อีกตัวอย่างหนึ่งคือคำสั่ง ftpหลังจากเปิดตัวซึ่งคำเชิญก็ใช้แบบฟอร์มนี้ด้วย

พรอมต์ตัวแปร พีเอส3ใช้ในคำสั่ง เลือก- พรอมต์ตัวแปร พีเอส4จะถูกพิมพ์ก่อนแต่ละคำสั่งในขณะนั้น ทุบตีติดตามความคืบหน้าของการดำเนินการ ค่าเริ่มต้นคือ " + ".

หากคุณต้องการ คุณสามารถเปลี่ยนประเภทของตัวแปรได้ PS1และ พีเอส2- ในกรณีนี้ คุณสามารถใช้สัญลักษณ์ใดๆ ที่ป้อนจากแป้นพิมพ์ได้ เช่นเดียวกับอักขระพิเศษจำนวนหนึ่งซึ่งเมื่อสร้างสตริงพร้อมต์จะถูกถอดรหัสตามตาราง 5.3 (เราแสดงรายการเพียงบางส่วนเท่านั้น เป็นต้น สำหรับรายการทั้งหมด โปรดดูที่ man page ของยูทิลิตี้ ทุบตี) .

ตารางที่ 5.3. อักขระพิเศษเพื่อสร้างคำเชิญ

เครื่องหมาย

ความหมายของมัน

เสียงบี๊บ (รหัส ASCII 07)

วันที่ในรูปแบบ "วัน เดือน วัน" เช่น พุธ ต.ค. 17

ชื่อโฮสต์จนถึงจุดแรก

ชื่อโฮสต์แบบเต็ม

เวลาปัจจุบันในรูปแบบ 24 ชั่วโมง: HH:MM:SS (ชั่วโมง:นาที:วินาที)

เวลาปัจจุบันในรูปแบบ 12 ชั่วโมง: HH:MM:SS

เวลาปัจจุบันในรูปแบบ 12 ชั่วโมง ก่อน/หลังเที่ยง

ชื่อของผู้ใช้ที่สตาร์ทเชลล์

ชื่อเต็มของไดเร็กทอรีการทำงานปัจจุบัน (เริ่มต้นที่รูท)

ไดเรกทอรีการทำงานปัจจุบัน (ไม่ได้ระบุเส้นทาง)

สัญลักษณ์ # หากเชลล์ทำงานเป็น superuser และสัญลักษณ์ $ หากเชลล์เริ่มต้นโดยผู้ใช้ปกติ

\nnn

อักขระที่มีรหัสฐานแปด nnn

ขึ้นบรรทัดใหม่ (ป้อนบรรทัด)

ชื่อเชลล์

หมายเลขทีมปัจจุบัน

แบ็กสแลช

จุดเริ่มต้นของลำดับอักขระที่ไม่สามารถพิมพ์ได้ (อักขระนี้สามารถใช้เพื่อรวมลำดับของอักขระควบคุมเทอร์มินัลในข้อความคำแนะนำเครื่องมือ)

สิ้นสุดลำดับอักขระที่ไม่สามารถพิมพ์ได้

หมายเลขซีเรียลของคำสั่งนี้ในประวัติของคำสั่ง

หมายเลขคำสั่งปัจจุบัน (หมายเลขซีเรียลของคำสั่งที่กำลังดำเนินการภายในเซสชันปัจจุบัน) อาจแตกต่างจากหมายเลขของคำสั่งนี้ในรายการประวัติคำสั่ง เนื่องจากหมายเลขหลังมีคำสั่งที่บันทึกไว้ในไฟล์ประวัติคำสั่ง

เมื่อเชลล์อ่านค่าของตัวแปรที่กำหนดคำใบ้แล้ว การแทนที่สามารถทำได้ตามกฎสำหรับการขยายพารามิเตอร์ การแทนที่ในชื่อคำสั่งและนิพจน์ทางคณิตศาสตร์ และการแยกคำ กฎเหล่านี้จะกล่าวถึงด้านล่างในหัวข้อ 5.7.

เช่น หลังจากรันคำสั่งแล้ว (เนื่องจากมีช่องว่างในสตริง จึงต้องใส่เครื่องหมายคำพูด)

# PS1="[\u@\h \W]\$"

พรอมต์มาตรฐานจะแสดงวงเล็บเหลี่ยม ชื่อผู้ใช้ สัญลักษณ์ @ , ชื่อคอมพิวเตอร์, ช่องว่าง, ชื่อไดเร็กทอรีปัจจุบัน (ไม่มีพาธ), วงเล็บเหลี่ยมปิด และสัญลักษณ์ $ (หากผู้ใช้ทั่วไปใช้งานเชลล์) หรือ # (หากเชลล์ทำงานเป็นรูท)

5.6.3 ตัวแปร เส้นทาง

มีชื่อตัวแปรที่สำคัญมากอีกตัวหนึ่ง เส้นทาง- ระบุรายการเส้นทางไปยังไดเร็กทอรีที่ ทุบตีค้นหาไฟล์ (โดยเฉพาะไฟล์ที่มีคำสั่ง) ในกรณีที่ไม่ได้ระบุเส้นทางแบบเต็มไปยังไฟล์ในบรรทัดคำสั่ง แต่ละไดเร็กทอรีในรายการนี้จะถูกคั่นด้วยเครื่องหมายทวิภาค ตัวแปรเริ่มต้น เส้นทางรวมถึงไดเร็กทอรี /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin,กล่าวคือดูเหมือนว่า:

/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:

ในการเพิ่มไดเร็กทอรีลงในรายการนี้ คุณต้องรันคำสั่งต่อไปนี้:

# PATH=$PATH:new_path.

เมื่อดำเนินการค้นหา เชลล์จะค้นหาไดเร็กทอรีตามลำดับที่แสดงไว้ในตัวแปร PATH

โปรดทราบว่าคุณสามารถรวมไดเร็กทอรีปัจจุบันไว้ในรายการนี้ได้โดยเพิ่มจุดให้กับตัวแปร PATH อย่างไรก็ตาม ไม่แนะนำสิ่งนี้ด้วยเหตุผลด้านความปลอดภัย ผู้โจมตีสามารถใส่คำสั่งในไดเร็กทอรีสาธารณะที่มีชื่อตรงกับคำสั่งใดคำสั่งหนึ่งที่ผู้ใช้ระดับสูงดำเนินการบ่อยครั้ง แต่ดำเนินการที่แตกต่างไปจากเดิมอย่างสิ้นเชิง (โดยเฉพาะอย่างยิ่งหากไดเร็กทอรีปัจจุบันอยู่ที่จุดเริ่มต้นของ รายการเส้นทางการค้นหา)

5.6.4 ตัวแปร ไอเอฟเอส

ตัวแปรนี้ระบุตัวคั่นฟิลด์ภายในที่ใช้ในการแยกคำระหว่างการแปลง บรรทัดคำสั่งดำเนินการโดยเชลล์ก่อนที่จะรันบรรทัดคำสั่งเพื่อดำเนินการ ค่าเริ่มต้นของตัวแปรนี้คือ "<Пробел><Символ_ новой_ строки>".

5.6.5 ไดเร็กทอรีปัจจุบันและโฮม

ชื่อของไดเร็กทอรีปัจจุบันถูกจัดเก็บไว้ในตัวแปรสภาพแวดล้อม (ชื่อ PWD) และค่าของตัวแปรนี้จะเปลี่ยนแปลงทุกครั้งที่เริ่มโปรแกรม ซีดี(และเมื่อเปลี่ยนไดเร็กทอรีปัจจุบันด้วยวิธีอื่น เช่น ผ่าน Midnight Commander)

เช่นเดียวกัน ชื่อเต็ม(ระบุเส้นทาง) ของโฮมไดเร็กทอรีของผู้ใช้ที่เรียกใช้กระบวนการนี้จะถูกเก็บไว้ในตัวแปร HOME

5.6.6 ทีม ส่งออก

เมื่อเชลล์รันโปรแกรมหรือคำสั่ง มันจะส่งผ่านตัวแปรสภาพแวดล้อมบางส่วนไปให้พวกมัน เพื่อให้ตัวแปรสภาพแวดล้อมถูกส่งผ่านไปยังกระบวนการที่เรียกใช้จากเชลล์ จะต้องตั้งค่าโดยใช้คำสั่งพิเศษ ส่งออกนั่นคือแทน

$ชื่อ=มูลค่า

จำเป็นต้องเขียนมันลงไป

$ส่งออกชื่อ=ค่า

ในกรณีนี้ โปรแกรมทั้งหมดที่เปิดตัวจากเชลล์ (รวมถึงอินสแตนซ์รองของเชลล์ด้วย) จะสามารถเข้าถึงตัวแปรที่กำหนดในลักษณะนี้ กล่าวคือ พวกเขาสามารถเรียกค่าตามชื่อได้

V. Kostromin (kos และ rus-linux dot net) - 5.6. พารามิเตอร์และตัวแปร สภาพแวดล้อมของเชลล์

ออบเจ็กต์ที่ตั้งชื่อและมีข้อมูลที่ใช้โดยแอปพลิเคชันอย่างน้อยหนึ่งรายการ ซึ่งโดยปกติจะเป็นหลายแอปพลิเคชันเรียกว่าตัวแปรสภาพแวดล้อม กล่าวง่ายๆ ก็คือ ตัวแปรสภาพแวดล้อมนั้นไม่มีอะไรมากไปกว่าตัวแปรที่มีชื่อและค่า

ค่าตัวแปรสภาพแวดล้อมสามารถเป็นตัวแก้ไขเริ่มต้นที่จะใช้ได้ เช่น ตำแหน่งของไฟล์ทั้งหมดที่สามารถดำเนินการบนระบบ หรือการตั้งค่าท้องถิ่นสำหรับระบบ อาจเป็นเรื่องยากเล็กน้อยสำหรับผู้เริ่มต้น แต่ตัวแปรสภาพแวดล้อมเป็นวิธีที่ดีเยี่ยม การแบ่งปันการตั้งค่าการกำหนดค่าระหว่างหลายแอปพลิเคชันและกระบวนการ

แพ็คเกจ Coreutils ประกอบด้วยโปรแกรม env และ printenv หากต้องการแสดงรายการตัวแปรสภาพแวดล้อมทั้งหมดที่มีค่าในปัจจุบัน เพียงพิมพ์:

$printenv

มีตัวแปรสภาพแวดล้อมสองประเภทใน bash shell:

  • ตัวแปรร่วม
  • ตัวแปรท้องถิ่น

ตัวแปรสิ่งแวดล้อมโลก

จากเซสชันเชลล์ ตัวแปรสภาพแวดล้อมโกลบอลและกระบวนการลูกใดๆ ที่เชลล์สร้างขึ้นจะถูกแสดง

ในทางกลับกัน ตัวแปรโลคัลสามารถเข้าถึงได้โดยเชลล์เมื่อสร้างขึ้นเท่านั้น สิ่งนี้ทำให้ตัวแปรสภาพแวดล้อมส่วนกลางมีประโยชน์ในแอปพลิเคชันที่ต้องการข้อมูลจากกระบวนการหลักและกระบวนการวางไข่

ตามค่าเริ่มต้น ระบบ Linux จะตั้งค่าตัวแปรสภาพแวดล้อมโกลบอลบางตัวเมื่อเริ่มเซสชันทุบตี ตัวแปรสภาพแวดล้อมของระบบจะใช้อักษรตัวพิมพ์ใหญ่ทั้งหมดในแต่ละครั้งเพื่อแยกความแตกต่างจากตัวแปรสภาพแวดล้อมของผู้ใช้ปกติ

ตัวแปรสภาพแวดล้อมท้องถิ่น

เนื่องจากชื่อบ่งชี้ว่าตัวแปรสภาพแวดล้อมภายในเครื่องสามารถมองเห็นได้เฉพาะในกระบวนการภายในเครื่องที่กำหนดไว้เท่านั้น อย่าสับสนเกี่ยวกับตัวแปรสภาพแวดล้อมภายในเครื่อง เพราะตัวแปรเหล่านี้มีความสำคัญพอๆ กับตัวแปรสภาพแวดล้อมส่วนกลาง ในความเป็นจริง ระบบ Linux จะกำหนดตัวแปรสภาพแวดล้อมท้องถิ่นมาตรฐานให้กับคุณตามค่าเริ่มต้น สิ่งนี้จะยุ่งยากเมื่อคุณพยายามดูรายการตัวแปรสภาพแวดล้อมในเครื่อง น่าเสียดายที่ไม่มีคำสั่งสำหรับเราที่จะแสดงเฉพาะตัวแปรสภาพแวดล้อมในเครื่องเท่านั้น มีคำสั่งที่แสดงตัวแปรสภาพแวดล้อมทั้งหมดที่ตั้งค่าไว้สำหรับกระบวนการเฉพาะ โปรดทราบว่าสิ่งนี้ยังรวมถึงตัวแปรสภาพแวดล้อมส่วนกลางด้วย

การตั้งค่าตัวแปรสภาพแวดล้อม

คุณสามารถสร้างตัวแปรสภาพแวดล้อมของคุณเองได้โดยตรงจาก bash shell ในส่วนถัดไป เราจะแสดงวิธีสร้างตัวแปรสภาพแวดล้อมของคุณเอง และอ้างอิงจากเชลล์เชิงโต้ตอบหรือโปรแกรมเชลล์ของคุณ

การตั้งค่าตัวแปรสภาพแวดล้อมท้องถิ่น

เมื่อเชลล์สคริปต์เริ่มทำงาน (หรือเชลล์สคริปต์ปรากฏขึ้น) คุณจะได้รับอนุญาตให้สร้างตัวแปรท้องถิ่นที่มองเห็นได้ภายในกระบวนการเชลล์ของคุณ คุณสามารถกำหนดตัวแปรสภาพแวดล้อมให้กับตัวแปรสตริงหรือตัวเลขได้โดยใช้เครื่องหมายเท่ากับ ซึ่งจะกำหนดค่าของตัวแปร:

$ andreyex_test=การทดสอบ $ echo $andreyex_test การทดสอบ $

ยินดีด้วย คุณเพิ่งสร้างตัวแปรแรกของคุณแล้ว เพียงจำไว้ว่าทุกครั้งที่คุณต้องการอ้างอิงค่าของตัวแปรสภาพแวดล้อม andreyex_test เพียงอ้างอิงโดยใช้ชื่อ $andreyex_test

หากคุณต้องการกำหนดสตริงค่าที่มีช่องว่าง คุณจะต้องใช้เครื่องหมายคำพูดเดี่ยวเพื่อระบุจุดเริ่มต้นและจุดสิ้นสุดของสตริง:

$ andreyex_test=ทดสอบสตริงแบบยาว -bash: a: คำสั่ง ไม่พบ$ andreyex_test="ทดสอบสตริงแบบยาว" $ echo $andreyex_test ทดสอบสตริงแบบยาว

หากปล่อยทิ้งไว้โดยไม่มีเครื่องหมายคำพูดเดี่ยว bash shell จะถือว่าอักขระถัดไปเป็นคำสั่งอื่นที่ต้องประมวลผล

โปรดทราบว่าเราใช้สำหรับตัวแปรสภาพแวดล้อมท้องถิ่นที่เรากำหนดไว้ ตัวอักษรตัวพิมพ์เล็กตัวแปรสภาพแวดล้อมของระบบที่เราเคยเห็นมาได้ใช้ตัวพิมพ์ใหญ่ทั้งหมด

ใน bash shell นี่คือแบบแผนมาตรฐาน หากคุณกำลังตั้งค่าตัวแปรสภาพแวดล้อมใหม่ สิ่งนี้ไม่จำเป็น แต่แนะนำให้ใช้ตัวพิมพ์เล็ก สิ่งนี้จะช่วยแยกความแตกต่างตัวแปรสภาพแวดล้อมส่วนบุคคลของคุณจากผลลัพธ์ของตัวแปรสภาพแวดล้อมระบบ

บันทึก: สิ่งสำคัญมากคือต้องไม่มีช่องว่างระหว่างชื่อตัวแปรสภาพแวดล้อม เครื่องหมายเท่ากับ และค่า หากคุณเว้นวรรคใดๆ ในงาน bash shell จะตีความค่าเป็นคำสั่งแยกต่างหาก:

$ andreyex_test2 = test -bash: andreyex_test2: ไม่พบคำสั่ง $

ตัวแปรสภาพแวดล้อมภายในเครื่องที่ตั้งค่าไว้ในกระบวนการเชลล์ของคุณจะพร้อมใช้งานทุกที่ในกระบวนการเชลล์ของคุณ แต่ถ้าคุณสร้างเชลล์อื่น เชลล์นั้นจะไม่สามารถใช้ได้ในเชลล์ย่อย:

$ bash $ echo $andreyex_test $ exit exit $ echo $andreyex_test ทดสอบสตริงแบบยาว $

ในกรณีนี้ เราเริ่มต้นเชลล์ย่อย ดังที่คุณเห็นว่าตัวแปรสภาพแวดล้อม andreyex_test ไม่มีอยู่ในเชลล์ย่อย (ประกอบด้วยค่าว่าง) หลังจากที่เราออกจากเชลล์ลูกและกลับสู่เชลล์ดั้งเดิมแล้ว ตัวแปรสภาพแวดล้อมในเครื่องยังคงพร้อมใช้งาน

ในทำนองเดียวกัน หากคุณตั้งค่าตัวแปรสภาพแวดล้อมเฉพาะที่ในกระบวนการลูกหลังจากที่คุณออกจากกระบวนการลูกแล้ว ตัวแปรสภาพแวดล้อมภายในเครื่องจะไม่สามารถเข้าถึงได้อีกต่อไป:

$ bash $ andreyex_test=การทดสอบ $ echo $andreyex_test การทดสอบ $ ออก ทางออก $ echo $andreyex_test $

ตัวแปรสภาพแวดล้อม andreyex_test ที่ตั้งค่าในเชลล์ลูกไม่มีอยู่เมื่อเรากลับสู่เชลล์พาเรนต์

การตั้งค่าตัวแปรสภาพแวดล้อมทั่วโลก

ตัวแปรสภาพแวดล้อมส่วนกลางสามารถมองเห็นได้จากกระบวนการทั้งหมดของกระบวนการลูกที่สร้างขึ้นโดยกระบวนการที่ตั้งค่าตัวแปรสภาพแวดล้อมส่วนกลาง วิธีการที่ใช้ในการสร้างตัวแปรสภาพแวดล้อมส่วนกลางคือการสร้างตัวแปรสภาพแวดล้อมภายในเครื่อง จากนั้นจึงส่งออกไปยังสภาพแวดล้อมส่วนกลาง

ทำได้โดยใช้คำสั่งส่งออก:

$ echo $andreyex_test ทดสอบสตริงแบบยาว $ ส่งออก andreyex_test $ bash $ echo $andreyex_test ทดสอบสตริงแบบยาว $

หลังจากที่เราใช้คำสั่งส่งออกในตัวแปรสภาพแวดล้อมโลคัล andreyex_test เราก็เริ่มต้น กระบวนการใหม่เชลล์และดูค่าของตัวแปรสภาพแวดล้อม andreyex_test ในครั้งนี้ คำสั่งส่งออกทำให้ตัวแปรสภาพแวดล้อมโกลบอลเป็นแบบโกลบอล ดังนั้นจึงคงค่าของมันไว้

โปรดทราบว่าเมื่อคุณรันคำสั่งที่ส่งออกในตัวแปรสภาพแวดล้อมภายในเครื่อง คุณไม่ได้ใช้เครื่องหมายดอลลาร์เพื่ออ้างถึงชื่อตัวแปร

การลบตัวแปรสภาพแวดล้อม

แน่นอนว่า หากคุณสามารถสร้างตัวแปรสภาพแวดล้อมใหม่ได้ ก็สมเหตุสมผลที่คุณสามารถลบตัวแปรสภาพแวดล้อมที่มีอยู่ได้เช่นกัน ซึ่งสามารถทำได้โดยใช้คำสั่ง unset:

$ echo $andreyex_test ทดสอบ $ ไม่ได้ตั้งค่า andreyex_test $ echo $andreyex_test $

หากคุณอ้างอิงตัวแปรสภาพแวดล้อมในคำสั่ง unset โปรดระวังอย่าใช้เครื่องหมายดอลลาร์

เมื่อทำงานกับตัวแปรสภาพแวดล้อมส่วนกลาง สิ่งต่างๆ จะซับซ้อนขึ้นเล็กน้อย หากคุณอยู่ในกระบวนการลูกและคุณปิดใช้งานตัวแปรสภาพแวดล้อมโกลบอล ตัวแปรนั้นจะมีผลกับกระบวนการลูกเท่านั้น ตัวแปรสภาพแวดล้อมโกลบอลยังคงมีอยู่ในกระบวนการหลัก:

$ andreyex_test=การทดสอบ $ ส่งออก andreyex_test $ bash $ echo $andreyex_test การทดสอบ $ unset andreyex_test $ echo $andreyex_test $ ทางออก ทางออก $ echo $andreyex_test การทดสอบ $

ในตัวอย่างนี้ เราตั้งค่าตัวแปรสภาพแวดล้อมภายในเครื่องที่เรียกว่า andreyex_test จากนั้นจึงส่งออกตัวแปรดังกล่าวเพื่อให้เป็นตัวแปรสภาพแวดล้อมส่วนกลาง จากนั้นเราเริ่มกระบวนการเชลล์ย่อยและได้รับการตรวจสอบเพื่อให้แน่ใจว่าตัวแปรสภาพแวดล้อมโกลบอล andreyex_test ยังคงพร้อมใช้งาน จากนั้น ขณะที่ยังอยู่ในเชลล์ย่อย เราใช้คำสั่ง unset เพื่อลบตัวแปรสภาพแวดล้อมโกลบอล andreyex_test จากนั้นจึงออกจากเชลล์ย่อย ตอนนี้กลับมาที่พาเรนต์เชลล์ดั้งเดิมแล้ว เราได้ตรวจสอบค่าของตัวแปรสภาพแวดล้อม andreyex_test และยังคงใช้ได้อยู่

ตัวแปรสภาพแวดล้อมเชลล์เริ่มต้น

มีตัวแปรสภาพแวดล้อมเฉพาะที่ bash shell ใช้เพื่อกำหนดสภาพแวดล้อมของระบบ คุณสามารถนับตัวแปรเหล่านี้เพื่อใช้บนระบบ Linux ของคุณได้เสมอ เนื่องจาก bash เชลล์เป็นอนุพันธ์ของเชลล์ Bourne Unix ดั้งเดิม จึงมีตัวแปรสภาพแวดล้อมที่กำหนดไว้แต่เดิมในเชลล์นั้นด้วย

ตัวอย่างต่อไปนี้แสดงให้เห็นว่าตัวแปรสภาพแวดล้อมที่จัดทำโดย bash เชลล์เข้ากันได้กับเชลล์เป้าหมาย Unix ดั้งเดิม

ตัวแปรสภาพแวดล้อมที่มีค่าที่สุดในรายการนี้คือตัวแปรสภาพแวดล้อม PATH

เมื่อคุณป้อนคำสั่งในเชลล์คำสั่งเชลล์ (อินเทอร์เฟซบรรทัดคำสั่ง) เชลล์จะต้องค้นหาระบบเพื่อค้นหาโปรแกรม ไดเร็กทอรีที่ค้นหาคำสั่งจะถูกกำหนดโดยตัวแปรสภาพแวดล้อม PATH บนระบบ Linux ตัวแปรสภาพแวดล้อม PATH ควรมีลักษณะดังนี้:

$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin $

กรณีนี้แสดงว่ามีไดเร็กทอรีแปดไดเร็กทอรีที่เชลล์ค้นหาคำสั่ง แต่ละไดเร็กทอรีจะถูกคั่นด้วยเครื่องหมายโคลอน และรายการไดเร็กทอรีที่ส่วนท้ายของตัวแปร PATH จะไม่มีวันสิ้นสุด คุณสามารถเพิ่มไดเร็กทอรีเพิ่มเติมให้กับ PATH ได้ตลอดเวลาโดยเพิ่มไดเร็กทอรีใหม่และเพิ่มโคลอนอื่น PATH ยังแสดงแบบสอบถามที่ค้นหาคำสั่งซื้อด้วย

นอกเหนือจากตัวแปรสภาพแวดล้อม Bourne มาตรฐานแล้ว bash เชลล์ยังมีตัวแปรอีกหลายตัว ดังที่แสดง:

ตัวแปร Bash Shell บอร์น:

CDPATH: รายการไดเร็กทอรีที่คั่นด้วยโคลอนซึ่งใช้เป็นพาธการค้นหาสำหรับคำสั่ง cd
HOME: โฮมไดเร็กทอรีของผู้ใช้ปัจจุบัน
IFS: รายการอักขระที่แยกฟิลด์ที่เชลล์ใช้เพื่อแยกสตริงข้อความ
MAIL: ชื่อไฟล์สำหรับ ตู้ไปรษณีย์ผู้ใช้ปัจจุบัน bash shell ตรวจสอบไฟล์นี้ จดหมายใหม่.
MAILPATH: รายการชื่อไฟล์หลายรายการสำหรับกล่องจดหมายของผู้ใช้ปัจจุบัน bash shell จะตรวจสอบแต่ละไฟล์ในรายการนี้เพื่อหาเมลใหม่
OPTARG: ค่าของอาร์กิวเมนต์พารามิเตอร์สุดท้ายที่ประมวลผลโดยคำสั่ง getopts
OPTIND: ค่าดัชนีของอาร์กิวเมนต์พารามิเตอร์สุดท้ายที่ประมวลผลโดยคำสั่ง getopts
เส้นทาง: รายการไดเร็กทอรีที่คั่นด้วยโคลอนซึ่งเชลล์ค้นหาคำสั่ง
PS1: สตริงพรอมต์บรรทัดคำสั่งหลัก
PS2: สตริงพรอมต์อินเทอร์เฟซบรรทัดคำสั่งเชลล์รอง

ตัวแปรสภาพแวดล้อมของเชลล์ทุบตี:

BASH: ชื่อพาธแบบเต็มเพื่อดำเนินการอินสแตนซ์ปัจจุบันของ bash shell
BASH_ENV: เมื่อติดตั้งแล้ว แต่ละสคริปต์ทุบตีจะพยายามเรียกใช้ไฟล์เริ่มต้นที่กำหนดโดยตัวแปรนี้ก่อนเรียกใช้
BASH_VERSION: หมายเลขเวอร์ชันของอินสแตนซ์ bash shell ปัจจุบัน
BASH_VERSINFO: อาร์เรย์ของตัวแปรที่มีหมายเลขเวอร์ชันหลักและรองของอินสแตนซ์ปัจจุบันของ bash shell
คอลัมน์: ประกอบด้วยความกว้างของเทอร์มินัลที่ใช้สำหรับอินสแตนซ์ปัจจุบันของ bash shell
COMP_CWORD: ดัชนีในตัวแปร COMP_WORDS ที่มีตำแหน่งเคอร์เซอร์ปัจจุบัน
COMP_LINE: บรรทัดคำสั่งปัจจุบัน
COMP_POINT: ดัชนีของตำแหน่งเคอร์เซอร์ปัจจุบันสัมพันธ์กับจุดเริ่มต้น ทีมปัจจุบัน.
COMP_WORDS: อาร์เรย์ตัวแปรที่มีแต่ละคำในบรรทัดคำสั่งปัจจุบัน
COMPREPLY: อาร์เรย์ตัวแปรที่มีรหัสทางออกที่เป็นไปได้ที่สร้างโดยฟังก์ชันเชลล์
DIRSTACK: อาร์เรย์ของตัวแปรที่มีเนื้อหาปัจจุบันของไดเร็กทอรีสแต็ก
EUID: ID ผู้ใช้ที่มีประสิทธิภาพของผู้ใช้ปัจจุบัน
FCEDIT: เอดิเตอร์ดีฟอลต์ที่ใช้โดยคำสั่ง fc
FIGNORE: รายการส่วนต่อท้ายที่คั่นด้วยโคลอนที่จะละเว้นเมื่อดำเนินการตั้งชื่อไฟล์ให้สมบูรณ์
FUNCNAME: ชื่อของไฟล์ปฏิบัติการ ในขณะนี้ฟังก์ชั่นเชลล์
GLOBIGNORE: รายการรูปแบบที่คั่นด้วยโคลอนซึ่งกำหนดชุดชื่อไฟล์ที่จะละเว้นเมื่อขยายชื่อไฟล์
GROUPS: อาร์เรย์ตัวแปรที่มีรายการกลุ่มที่ผู้ใช้ปัจจุบันเป็นสมาชิก
histchars: สูงสุดสามอักขระที่ควบคุมการขยายประวัติศาสตร์
HISTCMD: หมายเลขประวัติของคำสั่งปัจจุบัน
HISTCONTROL: ควบคุมคำสั่งที่จะป้อนในรายการประวัติเชลล์
HISTFILE: ชื่อไฟล์ที่จะบันทึกรายการประวัติเชลล์ (ค่าเริ่มต้นคือ history.bash)
HISTFILESIZE: จำนวนบรรทัดสูงสุดที่จะจัดเก็บไว้ในไฟล์ประวัติ
HISTIGNORE: รายการรูปแบบที่คั่นด้วยโคลอนซึ่งใช้เพื่อกำหนดว่าคำสั่งใดจะถูกละเว้นสำหรับไฟล์ประวัติ
HISTSIZE: จำนวนคำสั่งสูงสุดที่จัดเก็บไว้ในไฟล์ประวัติ
HOSTFILE: ประกอบด้วยชื่อของไฟล์ที่ควรอ่านเมื่อเชลล์จำเป็นต้องกรอกชื่อโฮสต์
HOSTNAME: ชื่อของโฮสต์ปัจจุบัน
HOSTTYPE: สตริงที่อธิบายการทำงานของเครื่อง bash-shell
IGNOREEOF: จำนวนอักขระ EOF ติดต่อกันที่เชลล์ต้องได้รับก่อนออก หากไม่มีค่านี้ ค่าดีฟอลต์ก็จะเป็นค่าเดียว
INPUTRC: ชื่อไฟล์การเริ่มต้น Readline (ค่าเริ่มต้นคือ .inputrc)
LANG: หมวดหมู่สถานที่สำหรับเชลล์
LC_ALL: แทนที่ตัวแปร LANG เพื่อระบุหมวดหมู่สถานที่
LC_COLLATE: ตั้งค่าลำดับการเปรียบเทียบที่ใช้เมื่อเรียงลำดับค่าสตริง
LC_CTYPE: กำหนดการตีความอักขระที่ใช้ในการขยายชื่อไฟล์และการจับคู่รูปแบบ
LC_MESSAGES: กำหนดการตั้งค่าภาษาที่ใช้เมื่อแปลสตริงที่มีเครื่องหมายคำพูดคู่ที่นำหน้าด้วยเครื่องหมายดอลลาร์
LC_NUMERIC: หมายถึง การตั้งค่าท้องถิ่นใช้สำหรับจัดรูปแบบตัวเลข
LINENO: หมายเลขบรรทัดในสคริปต์ที่กำลังดำเนินการ
LINES: กำหนดจำนวนสายที่มีอยู่บนเครื่อง
MACHTYPE: สตริงที่กำหนดประเภทระบบในรูปแบบ cpu-company-system
MAILCHECK: เชลล์ควรตรวจสอบเมลใหม่บ่อยแค่ไหน (ค่าเริ่มต้น 60 วินาที)
OLDPWD: ไดเร็กทอรีการทำงานก่อนหน้าที่ใช้ในเชลล์
ตัวเลือก: หากตั้งค่าเป็น 1 bash shell จะแสดงข้อผิดพลาดที่สร้างโดยคำสั่ง getopts
OSTYPE: การกำหนดสตริง ระบบปฏิบัติการซึ่งเชลล์ทำงานอยู่
PIPESTATUS: อาร์เรย์ตัวแปรที่มีรายการค่าสถานะการออกจากกระบวนการของกระบวนการเบื้องหน้า
POSIXLY_CORRECT: หากตั้งค่าไว้ bash จะทำงานในโหมด POSIX
PPID: ตัวระบุกระบวนการ (PID) ของกระบวนการเชลล์ทุบตีพาเรนต์
PROMPT_COMMAND: หากตั้งค่าไว้ คำสั่งที่จะดำเนินการก่อนที่จะแสดงพร้อมท์เริ่มต้น
PS3: แจ้งให้ใช้คำสั่งเลือก
PS4: คำแนะนำเครื่องมือที่แสดงก่อนที่จะสะท้อนบรรทัดคำสั่งหากใช้ พารามิเตอร์ทุบตี-x
PWD: ไดเร็กทอรีการทำงานปัจจุบัน
RANDOM: ส่งกลับตัวเลขสุ่มระหว่าง 0 ถึง 32767 การกำหนดค่าให้กับตัวแปรนี้จะสร้างตัวสร้างตัวเลขสุ่ม
ตอบกลับ: ตัวแปรเริ่มต้นสำหรับคำสั่งอ่าน
SECONDS: จำนวนวินาทีนับตั้งแต่เชลล์เริ่มทำงาน การกำหนดค่าจะรีเซ็ตตัวจับเวลาให้เป็นค่า
SHELLOPTS: รายการตัวเลือก bash shell ที่อนุญาตโดยคั่นด้วยโคลอน
SHLVL: ระบุระดับเชลล์ โดยเพิ่มขึ้นทีละระดับทุกครั้งที่เริ่ม bash เชลล์ใหม่
TIMEFORMAT: รูปแบบที่กำหนดวิธีที่เชลล์แสดงค่าเวลา
TMOUT: ค่าระยะเวลา (เป็นวินาที) ที่เลือกและอ่านคำสั่งควรรออินพุต ค่าเริ่มต้นเป็นศูนย์หมายถึงรออย่างไม่มีกำหนด
UID: ID ผู้ใช้จริงของผู้ใช้ปัจจุบัน

คุณอาจสังเกตเห็นว่าหลังจากใช้คำสั่ง set ตัวแปรสภาพแวดล้อมเริ่มต้นบางรายการอาจไม่แสดง คำอธิบายสำหรับสิ่งนี้อาจเป็นได้ว่า แม้ว่าสิ่งเหล่านี้จะเป็นตัวแปรสภาพแวดล้อมเริ่มต้น แต่ก็ไม่จำเป็นต้องมีค่าทั้งหมด

บทสรุป

ในคู่มือนี้ เราได้สำรวจโลกของตัวแปรสภาพแวดล้อม Linux ตัวแปรสภาพแวดล้อมโกลบอลมักจะเข้าถึงได้โดยกระบวนการลูกใดๆ ที่เกิดจากกระบวนการที่กำหนดไว้ ตัวแปรสภาพแวดล้อมภายในเครื่องจะสามารถเข้าถึงได้จากกระบวนการที่กำหนดไว้เท่านั้น

ระบบ Linux ใช้ตัวแปรสภาพแวดล้อมโกลบอลและโลคัลแต่ละตัวเพื่อจัดเก็บข้อมูลเกี่ยวกับสภาพแวดล้อมของระบบ คุณจะสามารถเข้าถึงข้อมูลนี้ได้จากอินเทอร์เฟซบรรทัดคำสั่งของเชลล์ รวมถึงเชลล์สคริปต์ภายใน bash เชลล์ใช้ตัวแปรสภาพแวดล้อมของระบบที่กำหนดไว้ในเชลล์ UNO Bourne ดั้งเดิม รวมถึงตัวแปรสภาพแวดล้อมใหม่อีกมากมาย ตัวแปรสภาพแวดล้อม PATH กำหนดรูปแบบการค้นหาที่ bash shell ยอมรับเมื่อค้นหาคำสั่งที่ปฏิบัติการได้ คุณจะสามารถเปลี่ยนตัวแปรสภาพแวดล้อม PATH เพื่อเพิ่มไดเร็กทอรีของคุณเอง หรืออาจเป็นสัญลักษณ์ไดเร็กทอรีปัจจุบัน เพื่อให้โปรแกรมของคุณทำงานได้ง่ายขึ้น คุณยังสามารถสร้างตัวแปรสภาพแวดล้อมส่วนกลางและท้องถิ่นของคุณเองเพื่อการใช้งานของคุณเองได้ เมื่อสร้างตัวแปรสภาพแวดล้อมแล้ว ตัวแปรนั้นจะพร้อมใช้งานสำหรับเซสชันเชลล์ทั้งหมด

มีไฟล์เริ่มต้นหลายไฟล์ที่เริ่ม bash shell เมื่อเริ่มต้นแล้ว ไฟล์เริ่มต้นเหล่านี้อาจมีคำจำกัดความของตัวแปรสภาพแวดล้อมเพื่อตั้งค่าตัวแปรสภาพแวดล้อมมาตรฐานสำหรับแต่ละเซสชันทุบตี หลังจากเข้าสู่ระบบแล้ว ระบบลินุกซ์ bash shell เข้าถึงไฟล์เริ่มต้น /etc/profile และสามไฟล์ ไฟล์ในเครื่องเปิดตัวสำหรับผู้ใช้แต่ละคน $HOME/.bash, $HOME/.bash เข้าสู่ระบบ และ $HOME/.profile

ผู้ใช้จะปรับแต่งไฟล์เหล่านี้เพื่อรวมตัวแปรสภาพแวดล้อมและสคริปต์เริ่มต้นใช้งานของตนเอง bash shell ยังจัดเตรียมอาร์เรย์ตัวแปรสภาพแวดล้อมเพิ่มเติม ตัวแปรสภาพแวดล้อมเหล่านี้สามารถมีหลายค่าในตัวแปรเดียว คุณจะสามารถเข้าถึงค่าแต่ละรายการได้โดยการระบุค่าดัชนีหรือโดยรวมโดยระบุชื่ออาร์เรย์ตัวแปรสภาพแวดล้อมแบบเต็ม สุดท้ายนี้ ในคู่มือนี้ เราต้องกล่าวถึงการใช้นามแฝงของคำสั่ง แม้ว่าจะไม่ใช่ตัวแปรสภาพแวดล้อม แต่นามแฝงของคำสั่งจะทำงานเหมือนกับตัวแปรสภาพแวดล้อม ช่วยให้คุณสามารถกำหนดนามแฝงสำหรับคำสั่งพร้อมกับพารามิเตอร์ได้ แทนที่จะพิมพ์คำสั่งและพารามิเตอร์ที่ยาวมาก คุณจะสามารถกำหนดนามแฝงง่ายๆ และใช้นามแฝงได้ตลอดเวลาในเซสชันเชลล์ของคุณ

ตัวแปรสภาพแวดล้อม Linux พร้อมด้วยตัวแปรเชลล์คือสิ่งที่กำหนดการตั้งค่าภายในเซสชันผู้ใช้

พวกมันจะถูกโหลดโดยอัตโนมัติ แต่สามารถแทนที่ได้ สภาพแวดล้อมจะถูกสร้างขึ้นทุกครั้งที่คุณเข้าสู่ระบบ

ตัวแปรสภาพแวดล้อม Linux, ตัวแปรเชลล์

ตัวแปรสภาพแวดล้อมใช้สำหรับกระบวนการเชลล์ผู้ใช้และกระบวนการย่อยทั้งหมดเกิดขึ้นภายใน

ตัวแปรเชลล์มีข้อมูลที่กำหนดสถานะของเซสชันปัจจุบัน ตัวอย่างเช่น ไดเร็กทอรีปัจจุบัน

แต่ละเซสชันใช้ทั้งตัวแปรสภาพแวดล้อมและตัวแปรเชลล์

สามารถดูรายการตัวแปรสภาพแวดล้อมได้โดยการรัน โรงพิมพ์หรือ สิ่งแวดล้อม

……
LC_MEASUREMENT=ru_RU.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LC_PAPER=ru_RU.UTF-8
LC_MONETARY=ru_RU.UTF-8
LANG=en_US.UTF-8
……

ความแตกต่างก็คือว่า โรงพิมพ์ช่วยให้คุณสามารถแสดงข้อมูลสำหรับตัวแปรเฉพาะ - ตัวอย่างเช่น:

ข้อดีของ env คือทำให้สามารถส่งตัวแปรไปยังคำสั่งเฉพาะได้

ตัวอย่างเช่น:

env SHELL=»/bin/bash» ls -la /opt

ดูตัวแปรสภาพแวดล้อม

BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
……

สามารถเปลี่ยนเส้นทางเอาต์พุตไปที่ น้อยเพื่อให้ง่ายต่อการนำทาง

เพื่อกำจัดข้อมูลที่ไม่จำเป็นในเอาต์พุตโดยไม่ต้องเปลี่ยนสภาพแวดล้อมปัจจุบัน คุณสามารถทำได้ดังนี้:

ในโหมด POSIX ฟังก์ชัน bash ที่ระบุจะไม่ถูกพิมพ์

ตัวแปรที่ใช้บ่อยที่สุด:
  • เปลือก- เชลล์ที่ตีความคำสั่ง
  • ผู้ใช้— ผู้ใช้
  • P.W.D.- ไดเรกทอรีปัจจุบัน
  • ภาคเรียน— ประเภทของเทอร์มินัลที่ถูกจำลอง

คำสั่งเชลล์ช่วยให้คุณสามารถเปลี่ยนค่าของตัวแปรได้ ดังนั้น pwd จะแสดงไดเร็กทอรีปัจจุบันไปยังคอนโซล

/home/admin

นี่คือตัวแปรเชลล์ PWD

admin@desktop:~$ set | grep PWD

OLDPWD=/tmp
PWD=/home/admin

ไปที่ /tmp แล้วดูว่าค่าเปลี่ยนแปลงไปอย่างไร

admin@desktop:~$ cd /tmp/

admin@desktop:/tmp$ set | grep PWD

OLDPWD=/home/admin
PWD=/tmp

คุณจะเห็นว่าเมื่อคุณเปลี่ยนไดเร็กทอรี ค่าของตัวแปรเชลล์ PWD ก็เปลี่ยนไป และ OLDPWD

วิธีการตั้งค่าสภาพแวดล้อมหรือตัวแปรเชลล์

ตัวแปรเชลล์ถูกเพิ่มเช่นนี้

ซัมวาร์ = "สวัสดี"

จะไม่อยู่ในเอาต์พุต env เนื่องจากเป็นตัวแปรเชลล์ ไม่ใช่ตัวแปรสภาพแวดล้อม

คุณสามารถดูเนื้อหาผ่านเสียงสะท้อนได้โดยการเพิ่มเครื่องหมาย $ หน้าชื่อ

สวัสดี

หากต้องการเพิ่มตัวแปรให้กับสภาพแวดล้อม คุณต้องส่งออกตัวแปรดังกล่าว

ส่งออก SOMEVAR =”สวัสดี”

ซัมวาร์=สวัสดี

หลังจากนี้ ค่าจะถูกสืบทอดโดยกระบวนการลูก

คุณสามารถลบตัวแปรสภาพแวดล้อมได้โดยใช้คำสั่งส่งออกเดียวกันกับคีย์ -n

ค่าจะถูกลบออกจากเชลล์ที่ไม่ได้ตั้งค่า

การโหลดตัวแปรอัตโนมัติเมื่อเข้าสู่ระบบ

ระบบ Linux ใช้ไฟล์ ~/.bashrc, ~/.bash_profile, ~/.bash_loginหรือ ~/.profileเพื่อกำหนดตัวแปร ไฟล์จะถูกอ่านระหว่างการเข้าสู่ระบบ ซึ่งไฟล์ที่ใช้จะขึ้นอยู่กับการแจกจ่าย

บน Ubuntu/Debain นี่คือ ~/.bashrc มันเพิ่มทั้งตัวแปรสภาพแวดล้อมและตัวแปรเชลล์

อันแรกก็อ่านแล้ว /etc/profile- โดยจะระบุและสามารถแทนที่ไฟล์ที่จะใช้ถัดไปและในลำดับใดได้

สำหรับเซสชันที่ไม่ได้เข้าสู่ระบบ ตัวแปรจะถูกตั้งค่าใน /etc/bash.bashrc เซสชันนี้เป็นเรื่องปกติสำหรับสคริปต์ที่ทำงานอยู่เบื้องหลัง

สำหรับงานส่วนใหญ่ก็เพียงพอที่จะแก้ไข ~/.bashrc.



 


อ่าน:



ตัวเลือก "ทุกที่ที่บ้าน" และ "ทุกที่ที่บ้านในรัสเซีย" MTS - คำอธิบายต้นทุนวิธีเชื่อมต่อ

ตัวเลือก

รัสเซียครอบครองพื้นที่ขนาดใหญ่ในโลกของเรา ชาวรัสเซียจำนวนมากเผชิญกับการเดินทางบ่อยครั้งทั่วดินแดนบ้านเกิด: การเดินทางเพื่อธุรกิจ การเดินทาง...

วิธีการกู้คืนหรือรีเซ็ตรหัสผ่านผู้ใช้ Windows

วิธีการกู้คืนหรือรีเซ็ตรหัสผ่านผู้ใช้ Windows

หากคุณลืมรหัสผ่านสำหรับบัญชี Windows ของคุณกะทันหัน คุณจะไม่มีทางเลือกอื่นนอกจากต้องหาทางรีเซ็ตหรือตั้งค่า...

วิธีลบโปรแกรม Avast อย่างสมบูรณ์เพื่อลบ Avast

วิธีลบโปรแกรม Avast อย่างสมบูรณ์เพื่อลบ Avast

ยูทิลิตี้เฉพาะสำหรับการลบโปรแกรมป้องกันไวรัส Avast ออกจากระบบอย่างสมบูรณ์และถูกต้อง โปรแกรมนี้สร้างขึ้นโดยทีมพัฒนาอย่างเป็นทางการ...

แอปพลิเคชั่นมือถือ Aliexpress

แอปพลิเคชั่นมือถือ Aliexpress

ปัจจุบันความก้าวหน้ากำลังก้าวไปข้างหน้าและได้รับความนิยมอย่างมากหากร้านค้ามีแอปพลิเคชันบนมือถือ Aliexpress ก็ไม่มีข้อยกเว้น การนำทาง...

ฟีดรูปภาพ อาร์เอสเอส