Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

ตัวแปรสภาพแวดล้อมใน PowerShell

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

ตัวอย่างเช่น โฮมไดเร็กทอรีของคุณถูกตั้งค่าเป็นตัวแปรสภาพแวดล้อมเมื่อคุณเข้าสู่ระบบ ลักษณะที่ปรากฏของ PowerShell ขึ้นอยู่กับระบบปฏิบัติการของคุณ

บน Windows:

PS C:\Users\bogus> Get-Variable HOME -valueOnly
C:\Users\bogus

บน Linux:

pwsh> Get-Variable HOME -valueOnly
HOME=/home/seth

บน Mac:

pwsh> Get-Variable HOME -valueOnly
HOME=/Users/bogus

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

บทความนี้เกี่ยวกับตัวแปรสภาพแวดล้อมในสภาพแวดล้อม PowerShell แบบโอเพนซอร์ส ดังนั้นจึงใช้ได้กับ PowerShell ที่ทำงานบน Windows, Linux และ Mac ผู้ใช้เปลือก Bash ควรอ้างอิงบทความของฉันเกี่ยวกับตัวแปรสภาพแวดล้อม Bash

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

ตัวแปรสภาพแวดล้อมคืออะไร

ตัวแปรสภาพแวดล้อมใน PowerShell เป็นตัวแปรชนิดพิเศษที่ให้ข้อมูลเกี่ยวกับสภาพแวดล้อมระบบปฏิบัติการแก่ระบบ ด้วยตัวแปรสภาพแวดล้อม คุณสามารถดูและเปลี่ยนตัวแปรในรีจิสทรีของ Windows รวมถึงตัวแปรที่ตั้งค่าสำหรับเซสชันเฉพาะได้

ใน PowerShell ตัวแปรสภาพแวดล้อมจะถูกเก็บไว้ใน Env: "drive" เข้าถึงได้ผ่าน ผู้ให้บริการสภาพแวดล้อม PowerShell ซึ่งเป็นระบบย่อยของ PowerShell นี่ไม่ใช่ไดรฟ์จริง แต่เป็นระบบไฟล์เสมือน

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

PS> Set-Location Env:
PS> pwd

Path
----
Env:/

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

คุณสามารถดูตัวแปรสภาพแวดล้อมทั้งหมดที่ตั้งค่าไว้ในระบบของคุณด้วย Get-ChildItem คำสั่งจากภายใน Env: ขับ. รายการมีความยาว ดังนั้นส่งเอาต์พุตผ่าน out-host -paging เพื่อให้อ่านง่าย:

PS> Get-ChildItem | out-host -paging
LOGNAME      seth
LS_COLORS    rs=0:mh=00:bd=48;5;232;38;5;
MAIL         /var/spool/mail/seth
MODULEPATH   /etc/scl/modulefiles:/etc/scl/modulefiles
MODULESHOME  /usr/share/Modules
OLDPWD       /home/seth
PATH         /opt/microsoft/powershell/6:/usr/share/Modules/bin
PSModulePath /home/seth/.local/share/powershell/Modules
PWD          /home/seth
[...]

หากคุณไม่ได้อยู่ใน Env: ไดรฟ์ คุณก็ทำสิ่งเดียวกันได้โดยเพิ่ม Env:  ตามคำสั่งของคุณ:

PS> Get-ChildItem Env: | out-host -paging
LOGNAME      seth
LS_COLORS    rs=0:mh=00:bd=48;5;232;38;5;
MAIL         /var/spool/mail/seth
MODULEPATH   /etc/scl/modulefiles:/etc/scl/modulefiles

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

หากคุณต้องการเปลี่ยนแปลงตัวแปรอย่างถาวร คุณต้องเปลี่ยนตัวแปรใน Windows Registry บน Windows หรือในไฟล์การกำหนดค่าเชลล์ (เช่น ~/.bashrc ) บน Linux หรือ Mac หากคุณไม่คุ้นเคยกับการใช้ตัวแปรใน PowerShell โปรดอ่านตัวแปรของฉันในบทความ PowerShell ก่อนดำเนินการต่อ

ตัวแปรสภาพแวดล้อมมีไว้ทำอะไร

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

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

ต่างจากตัวแปรปกติอย่างไร

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

ตัวอย่างเช่น สร้างตัวแปร:

PS> Set-Variable -Name VAR -Value "example"
PS> gv VAR -valueOnly
example

เรียกใช้เชลล์ใหม่ แม้จากภายในเชลล์ปัจจุบันของคุณ:

PS> pwsh
PS c:\> gv VAR -valueOnly
gv : Cannot find a variable with the name 'example'.

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

คุณตั้งค่าตัวแปรสภาพแวดล้อมอย่างไร

เมื่อตั้งค่าตัวแปรสภาพแวดล้อม คุณควรชัดเจนว่าเป็นตัวแปรสภาพแวดล้อมโดยใช้ $Env: สัญกรณ์:

PS Env:/> $Env:FOO = "hello world"
PS Env:/> Get-ChildItem FOO
hello world

ในการทดสอบ ให้เปิดเซสชันใหม่และเข้าถึงตัวแปรที่คุณเพิ่งสร้างขึ้น เนื่องจากตัวแปรเป็นตัวแปรสภาพแวดล้อม คุณต้องเติม $Env: . ไว้ข้างหน้า :

PS Env:/> pwsh
PS c:\> $Env.FOO
hello world

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

คุณตั้งค่าตัวแปรสภาพแวดล้อมในโปรไฟล์ของคุณอย่างไร

ในการบังคับให้ตัวแปรสภาพแวดล้อมคงอยู่ตลอดเซสชัน คุณต้องเพิ่มลงในโปรไฟล์ PowerShell เช่น CurrentUser,AllHosts โปรไฟล์ ซึ่งอยู่ใน HOME/Documents/Profile.ps1 :

PS> Add-Content -Path $Profile.CurrentUserAllHosts -Value '$Env:FOO = "hello world"'

เมื่อเพิ่มบรรทัดนี้ เซสชัน PowerShell ใดๆ ที่เปิดตัวจะสร้างอินสแตนซ์ FOO ตัวแปรสภาพแวดล้อมและตั้งค่าเป็น สวัสดีชาวโลก .

ขณะนี้มีโปรไฟล์เริ่มต้นหกโปรไฟล์ที่ควบคุมเซสชัน PowerShell ดังนั้นโปรดอ้างอิงบล็อก Microsoft dev สำหรับข้อมูลเพิ่มเติม

คุณจะค้นพบตัวแปรสภาพแวดล้อมใหม่ได้อย่างไร

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

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

ตัวอย่างเช่น Python เสนอให้เพิ่มเส้นทาง Python ที่เหมาะสมใน เส้นทาง . ของคุณ ตัวแปรสภาพแวดล้อมระหว่างการติดตั้ง [หมายเหตุ:PATH?] หากคุณปฏิเสธ คุณสามารถตั้งค่าเองได้ในตอนนี้ ซึ่งคุณรู้วิธีแก้ไขตัวแปรสภาพแวดล้อมแล้ว

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

หากต้องการค้นหาตัวแปรที่สำคัญสำหรับแอปพลิเคชันแต่ละรายการ โปรดดูเอกสารสำหรับผู้ใช้และนักพัฒนาซอฟต์แวร์