ฉันจะแสดงรายการตัวแปรเชลล์ทั้งหมดได้อย่างไร


18

อ่านเกี่ยวกับคำถามนี้: ใน zsh ฉันจะแสดงรายการตัวแปรสภาพแวดล้อมทั้งหมดได้อย่างไร? ฉันสงสัยว่าฉันจะแสดงรายการตัวแปรเชลล์ทั้งหมดได้อย่างไร

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

ฉันสนใจ Bash และ Zsh เป็นหลัก แต่ก็เป็นการดีที่ได้ทราบว่าจะทำสิ่งนี้ได้อย่างไรในกระสุนหลักอื่น ๆ

คำตอบ:


21

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

bash: set -o posix ; setการใช้งาน ตัวเลือก POSIX อยู่ที่นั่นเพื่อหลีกเลี่ยงการส่งข้อมูลมากเกินไปเช่นคำจำกัดความของฟังก์ชัน declare -pยังใช้งานได้

zsh : ใช้ typeset

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

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

(เสร็จสมบูรณ์ขอบคุณความคิดเห็น)


declare -pทำเช่นเดียวกัน
Costas

คำถามนี้ยังมีคำตอบที่นี่: stackoverflow.com/questions/1305237/…
Uriel

1
set -o posixไม่มีอยู่ใน zsh; setไม่นิยามฟังก์ชันของเอาต์พุต
vinc17

1
set -o posixเป็นข้อผิดพลาดทางไวยากรณ์ในเชลล์ส่วนใหญ่
mikeserv

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

7

มีทางเลือกมากมาย:

printenv

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

env

env - รันโปรแกรมในสภาพแวดล้อมที่ถูกปรับเปลี่ยน

ส่งออก

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

-p แสดงผลในรูปแบบที่อาจนำมาใช้ใหม่เป็นอินพุต

หากไม่มีการระบุชื่อหรือหากระบุตัวเลือก `-p 'รายการของชื่อที่ส่งออกจะปรากฏขึ้น

ชุด

มีประโยชน์ในการรับตัวแปรเชลล์เช่นกัน

หากคุณต้องการข้อมูลเพิ่มเติม (จำนวนเต็มส่งออก) คุณควรใช้แทน

เรียงพิมพ์

การส่งออกมีข้อได้เปรียบว่าเอาต์พุตสามารถอ่านได้ทันทีบนเปลือก

ในที่สุดก็มี

compgen -v

แสดงความสำเร็จที่เป็นไปได้ขึ้นอยู่กับตัวเลือก

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


1
exportsetอย่างน้อยก็ไม่มีข้อได้เปรียบเมื่อพูดถึงการอ้างเชลล์อีกครั้ง และprintenvและenvไม่ได้เกี่ยวกับตัวแปรเชลล์แม้ว่าสิ่งเหล่านี้มักจะตรงกับตัวแปรสภาพแวดล้อม
mikeserv

3

ด้วยzshคุณสามารถใช้typesetซึ่งให้ข้อมูลมากกว่าsetเช่นประเภทของตัวแปร คุณยังสามารถกรองผลลัพธ์ด้วยgrepหรือsedขึ้นอยู่กับสิ่งที่คุณต้องการ ตัวแปรสภาพแวดล้อมถูกทำเครื่องหมายexportedในเอาต์พุต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.