ฉันจะสร้างสภาวะแวดล้อม clean shell สำหรับการใช้งานชั่วคราวได้อย่างไร?


15

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


คำตอบ:


10

ฉันใช้bashฟังก์ชั่นต่อไปนี้เป็นการส่วนตัว:

so() {
    local tmpdir="$(mktemp -d)"
    local tmprc="$(mktemp)"
    cat > "$tmprc" << EOF
PS1='\\$ '
cd "$tmpdir"
EOF
    env - HOME="$HOME" TERM="$TERM" bash --rcfile "$tmprc"
    rm -rf "$tmpdir" "$tmprc"
}

นี่คือสิ่งที่มันทำตามลำดับ:

  • สร้างไดเรกทอรีชั่วคราว (เพื่อใช้เป็นไดเรกทอรีการทำงานของเราในสภาพแวดล้อมที่สะอาด);
  • สร้างไฟล์ชั่วคราว (เพื่อใช้เป็นbashไฟล์ rc ของเรา);
  • ในไฟล์ rc เพิ่มบรรทัดที่:
    • ตั้งค่าPS1พรอมต์ให้เป็น terminator ของพรอมต์ตามด้วยเว้นวรรคซึ่งทำให้มันมีความเกี่ยวข้องในกรณีที่เราต้องการสำเนาของผลลัพธ์ของเราบนเว็บไซต์ถาม - ตอบ
    • เปลี่ยนเป็นไดเรกทอรีชั่วคราวที่เราสร้าง
  • เรียกใช้อินสแตนซ์ใหม่ของbashซึ่ง:
    • เริ่มแรกมีสภาพแวดล้อมที่ว่างยกเว้น$HOMEและ$TERM( env - ...);
    • อ่านไฟล์ rc ของมันจากไฟล์ชั่วคราวที่เราสร้างไว้ก่อนหน้า ( --rcfile)
  • เมื่อ bash ออกแล้วให้ลบไฟล์ชั่วคราวที่เราสร้างขึ้น

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


คุณลองใช้scriptหรือยัง
h3rrmiller

@ h3rrmiller - ใช่แม้ว่าฉันมักจะไม่ใช้มันเกินความชอบ
Chris Down

2

chrootเป็นวิธีหนึ่งโดยใช้ VM เป็นอีกวิธีหนึ่ง คุณสามารถสร้างสภาพแวดล้อม chroot บน LV ถ่ายภาพทำอะไรก็ได้แล้วเปลี่ยนกลับเป็นสถานะ snapshotted

หรือ - ทำเช่นเดียวกันกับ VM (disk-snapshot) และย้อนกลับการเปลี่ยนแปลงทั้งหมดหลังจากนั้น

ฉันมักจะทำเช่นนี้กับ VM ที่ติดตั้งใหม่ (ใช้ VirtualBox และ kickstart หรือ autoyast ด้วยบูต PXE)

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