หากคุณใช้ Bash คำสั่งนี้จะแสดงชื่อของตัวแปรเชลล์ทั้งหมดที่ไม่ได้รับการสืบทอดโดยกระบวนการลูกและไม่ใช่ส่วนหนึ่งของกระดานชนวนเริ่มต้น:
diff -U 1 <(set -o posix ; set |cut -d= -f1) <(exec bash -ic 'set -o posix ; set' | cut -d= -f1)|grep '^[-][^-]'|cut -d- -f2|grep -vE '^(COLUMNS|HISTFILESIZE|HISTSIZE|LINES|PIPESTATUS)$'
สิ่งนี้จะสร้างรายการชื่อตัวแปรทั้งหมดในเชลล์ปัจจุบัน (พร้อมset
) และรายการชื่อตัวแปรทั้งหมดในกระบวนการย่อยที่สร้างขึ้นใหม่ซึ่งรันเชลล์เดียวกันค้นหาทั้งหมดที่มีอยู่ในรายการแรกไม่ใช่ที่สอง (พร้อมdiff
) การตัดครั้งสุดท้ายและ grep ตัวแรก) และตัดค่าตัวแปรเริ่มต้นเฉพาะของ Bash ที่กระบวนการย่อยจะไม่มีเนื่องจากไม่ใช่เปลือกที่ผู้ใช้หันเข้าหา set -o posix
ทำset
รายการตัวแปรเท่านั้นและไม่ใช่ฟังก์ชั่น
มันจะละเว้นทั้งตัวแปรสภาพแวดล้อมที่สืบทอดและตัวแปรที่คุณทำเครื่องหมายเพื่อการส่งออกอย่างชัดเจน
สลับbash
เปลือกของคุณ นอกจากนี้คุณยังจะต้องเปลี่ยนรายชื่อของตัวแปรละเลยในช่วงและอาจจะสูญเสียgrep
set -o posix
หากเชลล์ของคุณไม่มีการทดแทนกระบวนการคุณจะต้องใช้ไฟล์ชั่วคราวแทนหรือเข้าถึงเฉพาะตัวอธิบายไฟล์ (เช่น/dev/fd
)
ในทางกลับกันหากสิ่งที่คุณต้องการทำคือลบตัวแปรและฟังก์ชั่นในตัวคุณออกไป
exec bash
จะมีผลกระทบนั้น (ในขณะที่อ่านไฟล์การกำหนดค่าบางไฟล์และอาจสูญเสียการเปลี่ยนแปลงในตัวเลือกเชลล์)