มันเป็น "ทำสิ่งหนึ่งในครั้งเดียว"?
ความคิดเห็นนี้ดูเหมือนคำถามเกี่ยวกับหลักการออกแบบทั่วไป บ่อยครั้งที่คำถามเกี่ยวกับสิ่งเหล่านี้เป็นเรื่องส่วนตัวมากและเราไม่สามารถเขียนคำตอบที่เหมาะสมได้ ได้รับการเตือนว่าเราอาจปิดคำถามในกรณีนี้
บางครั้งเรามีคำอธิบายสำหรับตัวเลือกการออกแบบดั้งเดิมเนื่องจากนักพัฒนาได้เขียนเกี่ยวกับพวกเขา แต่ฉันไม่มีคำตอบที่ดีสำหรับคำถามนี้
เหตุใดจึงcp
ออกแบบวิธีนี้
ปัญหาคือ Unix อายุมากกว่า 40 ปี
หากคุณกำลังสร้างระบบใหม่ตอนนี้คุณอาจเลือกการออกแบบที่แตกต่างกัน แต่การเปลี่ยนยูนิกซ์จะทำลายสคริปต์ที่มีอยู่ดังที่กล่าวไว้ในคำตอบอื่น ๆ
ทำไมถูก cp
ออกแบบมาเพื่อเขียนทับไฟล์ที่มีอยู่ในใจ
คำตอบสั้น ๆ คือ "ฉันไม่รู้" :-)
เข้าใจว่าcp
เป็นปัญหาเดียว ฉันคิดว่าไม่มีโปรแกรมคำสั่งดั้งเดิมป้องกันการเขียนทับหรือลบไฟล์ เชลล์มีปัญหาคล้ายกันเมื่อเปลี่ยนเส้นทางเอาต์พุต:
$ cat first.html > second.html
second.html
คำสั่งนี้ยังเขียนทับเงียบ
ฉันสนใจที่จะคิดว่าโปรแกรมเหล่านี้สามารถออกแบบใหม่ได้อย่างไร มันอาจต้องมีความซับซ้อนเป็นพิเศษ
ผมคิดว่านี่เป็นส่วนหนึ่งของคำอธิบาย: ต้น Unix เน้นเรียบง่ายใช้งาน สำหรับคำอธิบายโดยละเอียดเพิ่มเติมโปรดดู "แย่กว่าดีกว่า" เชื่อมโยงท้ายคำตอบนี้
คุณสามารถเปลี่ยน> second.html
เพื่อหยุดกับข้อผิดพลาดหากsecond.html
มีอยู่แล้ว แต่ที่เรากล่าวถึงบางครั้งผู้ใช้ไม่ต้องการแทนที่ไฟล์ที่มีอยู่ ตัวอย่างเช่นเธออาจสร้างคำสั่งที่ซับซ้อนพยายามหลายครั้งจนกว่าจะทำตามที่เธอต้องการ
ผู้ใช้สามารถเรียกใช้rm second.html
ก่อนถ้าเธอต้องการ นี่อาจเป็นการประนีประนอมที่ดี! มันมีข้อเสียที่เป็นไปได้บางอย่างของมันเอง
- ผู้ใช้จะต้องพิมพ์ชื่อไฟล์สองครั้ง
rm
คนยังได้รับในเปลืองใจใช้ ดังนั้นฉันต้องการทำให้rm
ปลอดภัยยิ่งขึ้นเช่นกัน แต่อย่างไร หากเราrm
แสดงแต่ละชื่อไฟล์และขอให้ผู้ใช้ยืนยันตอนนี้เธอต้องเขียนสามบรรทัดคำสั่งแทนที่จะเป็นหนึ่ง นอกจากนี้หากเธอต้องทำเช่นนี้บ่อยเกินไปเธอจะติดนิสัยและพิมพ์ "y" เพื่อยืนยันโดยไม่คิด ดังนั้นมันอาจจะน่ารำคาญมากและมันก็ยังอาจเป็นอันตรายได้
บนระบบที่ทันสมัยฉันแนะนำให้ติดตั้งtrash
คำสั่งและใช้งานแทนrm
ตำแหน่งที่เป็นไปได้ การเปิดตัวของการจัดเก็บถังขยะเป็นเช่นความคิดที่ดีสำหรับเครื่องคอมพิวเตอร์กราฟิกผู้เดียว
ฉันคิดว่ามันเป็นสิ่งสำคัญเช่นกันที่จะเข้าใจข้อ จำกัด ของฮาร์ดแวร์ Unix ดั้งเดิม - RAM ที่ จำกัด และพื้นที่ดิสก์เอาต์พุตที่แสดงบนเครื่องพิมพ์ที่ช้า รวมถึงซอฟต์แวร์ระบบและการพัฒนา
โปรดสังเกตว่า Unix ดั้งเดิมไม่มีแท็บที่เสร็จสมบูรณ์เพื่อเติมชื่อไฟล์อย่างรวดเร็วสำหรับrm
คำสั่ง (นอกจากนี้เชลล์เป้าหมายเดิมไม่มีประวัติคำสั่งเช่นเมื่อคุณใช้ปุ่มลูกศรขึ้นในbash
)
ed
กับการส่งออกเครื่องพิมพ์ที่คุณจะใช้โปรแกรมแก้ไขบรรทัดตาม เป็นการยากที่จะเรียนรู้มากกว่าโปรแกรมแก้ไขข้อความ คุณต้องพิมพ์บรรทัดปัจจุบันตัดสินใจว่าคุณต้องการเปลี่ยนบรรทัดใดและพิมพ์คำสั่งแก้ไข
การใช้> second.html
เป็นบิตเช่นการใช้คำสั่งในตัวแก้ไขบรรทัด ผลที่ได้ขึ้นอยู่กับสถานะปัจจุบัน (หากsecond.html
มีอยู่แล้วเนื้อหาจะถูกยกเลิก) หากผู้ใช้ไม่แน่ใจเกี่ยวกับสถานะปัจจุบันเธอคาดว่าจะเรียกใช้ls
หรือls second.html
ก่อน
"ใช้งานง่าย" เป็นหลักการออกแบบ
มีการตีความที่เป็นที่นิยมของการออกแบบ Unix ซึ่งเริ่มต้น:
การออกแบบจะต้องเรียบง่ายทั้งในส่วนของการติดตั้งและส่วนต่อประสาน มันเป็นสิ่งสำคัญสำหรับการใช้งานที่จะง่ายกว่าอินเทอร์เฟซ ความเรียบง่ายคือการพิจารณาที่สำคัญที่สุดในการออกแบบ
...
กาเบรียลแย้งว่า "แย่กว่าดีกว่า" ผลิตซอฟต์แวร์ที่ประสบความสำเร็จมากกว่าวิธีการของ MIT: ตราบใดที่โปรแกรมเริ่มต้นดีโดยทั่วไปมันจะใช้เวลาและความพยายามน้อยกว่าในการเริ่มต้นและจะปรับตัวเข้ากับสถานการณ์ใหม่ได้ง่ายขึ้น ยกตัวอย่างเช่นการย้ายซอฟต์แวร์ไปยังเครื่องใหม่ทำได้ง่ายขึ้นด้วยวิธีนี้ ดังนั้นการใช้งานจะแพร่กระจายอย่างรวดเร็วนานก่อนที่โปรแกรม [ดีกว่า] จะมีโอกาสได้รับการพัฒนาและนำไปใช้ (ข้อได้เปรียบผู้เสนอญัตติแรก)
https://en.wikipedia.org/wiki/Worse_is_better