ฉันกำลังเขียนเชลล์สคริปต์ด้วยตัวแปรบางตัวที่ควรกำหนดค่าโดยผู้ใช้ จะมีโปรแกรมติดตั้งสำหรับดาวน์โหลดและกำหนดค่าสคริปต์โดยอาจถามคำถามหลายข้อ สคริปต์ที่เป็นปัญหานั้นมุ่งเป้าไปที่ผู้พัฒนารายอื่น
สิ่งนี้สามารถนำไปใช้ได้หลายวิธี:
ใช้ตัวยึดตำแหน่งในสคริปต์และใช้
sed
เพื่อแทนที่ในระหว่างการติดตั้ง (สิ่งนี้: /programming/415677/how-to-replace-placeholders-in-a-text-file )ข้อดี: คำจำกัดความของตัวแปรทั้งหมดมีอยู่ในสคริปต์ ง่ายในการดาวน์โหลดสคริปต์ด้วยตนเองและกำหนดค่าตัวแปรสำหรับผู้ใช้ที่ต้องการตัวแก้ไขมากกว่าตัวติดตั้ง
ข้อด้อย: มันยากที่จะกำหนดค่าตัวแปรใหม่ผ่านตัวติดตั้งเมื่อมีอยู่ นอกจากว่าฉันจะสร้าง regexp ที่ซับซ้อนมากขึ้นซึ่งจะมีแนวโน้มที่จะเกิดข้อผิดพลาด
ใช้ไฟล์ configโดยทั่วไปแล้วเชลล์สคริปต์อื่นที่มีการมอบหมายและใช้
source
เพื่อรวมไฟล์นั้น (และอาจวางไว้ใน~/.scriptname
? สคริปต์หลักถูกคัดลอกไปยัง/usr/local/bin
)ข้อดี: ง่ายต่อการกำหนดค่าสคริปต์ใหม่ สามารถเพิ่มพารามิเตอร์สำหรับการทำเช่นนั้นได้จากสคริปต์หลัก (อาจเป็นไปได้ในโซลูชันแรกเช่นกัน แต่การแก้ไขสคริปต์จากตัวเองไม่ได้ฟังดูเหมือนเป็นความคิดที่ดีมาก)
ข้อด้อย: สคริปต์นี้ขึ้นอยู่กับสองไฟล์และผู้ใช้จำเป็นต้องเรียกใช้โปรแกรมติดตั้งสำหรับไฟล์การกำหนดค่าที่จะสร้าง สิ่งนี้สามารถแก้ไขได้โดยการสร้างไฟล์ปรับแต่งอัตโนมัติหากไม่มีอยู่ แต่การค้นหาไฟล์กำหนดค่าภายนอกจะยังคงเป็นเรื่องยุ่งยากสำหรับผู้ใช้ที่ต้องการดาวน์โหลดสคริปต์แก้ไขและดำเนินการกับมัน
นอกจากนี้ยังมีตัวเลือกเล็กน้อยเกี่ยวกับวิธีการจัดการการกำหนดค่าโดยผู้ใช้หลังการติดตั้ง:
คอมไพล์เช่น
$ myscript config server.host example.org $ myscript config server.proxypath / home / johndoe / proxy $ myscript config server.httppath / home / johndoe / เว็บการกำหนดค่า
$ myscript แบบโต้ตอบ
ป้อนชื่อโฮสต์เซิร์ฟเวอร์: example.org
ป้อนพา ธ ไปยังพร็อกซีบนเซิร์ฟเวอร์: / home / johndoe / proxy
ป้อนเส้นทางไปยังไดเรกทอรี http บนเซิร์ฟเวอร์: / home / johndoe / webgetopts พร้อมตัวเลือกแบบยาว
$ myscript --host example.org --proxypath / home / johndoe / proxy --httppath / home / johndoe / webง่าย
$ myscript config example.org / home / johndoe / proxy / home / johndoe / เว็บ
มีวิธีอื่นอีกไหมในการทำสิ่งนี้ที่คุณจะพิจารณา?
มีแนวปฏิบัติที่ดีที่สุดมีอะไรที่งดงาม?