โปรดทราบว่าผมไม่ได้ถามว่า ผมรู้อยู่แล้วว่าตัวเลือกเช่นและpvrsync -P
ฉันต้องการถามว่าทำไมไม่cpใช้แถบความคืบหน้าอย่างน้อยก็เป็นธง
pvและrsync -Pดูการย้ายไฟล์ที่มีแถบความคืบหน้า ( หนึ่งในคำตอบอ้างอิงแพตช์cpเพื่อcp -gให้ตัวบ่งชี้ความคืบหน้า)
โปรดทราบว่าผมไม่ได้ถามว่า ผมรู้อยู่แล้วว่าตัวเลือกเช่นและpvrsync -P
ฉันต้องการถามว่าทำไมไม่cpใช้แถบความคืบหน้าอย่างน้อยก็เป็นธง
pvและrsync -Pดูการย้ายไฟล์ที่มีแถบความคืบหน้า ( หนึ่งในคำตอบอ้างอิงแพตช์cpเพื่อcp -gให้ตัวบ่งชี้ความคืบหน้า)
คำตอบ:
ประเพณีในเครื่องมือยูนิกซ์คือการแสดงข้อความเฉพาะเมื่อมีสิ่งผิดปกติ ฉันคิดว่านี่เป็นทั้งสำหรับการออกแบบและการใช้งานจริง การออกแบบมีวัตถุประสงค์เพื่อให้ชัดเจนเมื่อมีสิ่งผิดปกติ: คุณได้รับข้อความแสดงข้อผิดพลาดและไม่ได้จมอยู่ในข้อความที่ไม่เป็นข้อมูล เหตุผลในทางปฏิบัติก็คือว่าในวันแรกมากยูนิกซ์ของยังคงเป็นteleprinters ; นั่นคือผลลัพธ์จากโปรแกรมจะถูกพิมพ์ลงบนกระดาษและคุณไม่ต้องการพิมพ์แถบความคืบหน้า
ไม่ว่าจะด้วยเหตุผลใดก็ตามประเพณีการแสดงข้อความที่มีประโยชน์นั้นติดอยู่ในโลกของยูนิกซ์ เครื่องมือที่ทันสมัยได้แนะนำแถบความคืบหน้าในบางครั้ง; ในกรณีของ rsync แรงจูงใจหลักคือ rsync มักจะดำเนินการผ่านเครือข่ายและเครือข่ายจะมีจำนวนมากกว่าดิสก์ท้องถิ่นดังนั้นแถบความคืบหน้าจึงมีประโยชน์มากกว่า ใช้เหตุผลเดียวกันกับ wget
cpย้อนกลับไปในช่วงต้นทศวรรษ 1970: การแข่งขันเป็นแบบดั้งเดิมที่คุณจะได้รับ
ddให้งบความคืบหน้า? ddกลับไปที่ 1966 (OS / 360) เครื่องมือ Unix สามารถ verbose หากผู้ใช้ต้องการให้พวกเขาเป็นอย่างละเอียด แต่น่าเสียดายที่คุณไม่สามารถพูดว่าซีพีละเอียดจะเป็น (มีเพียงหนึ่งระดับฟุ่มเฟื่อยเพิ่มเติม: -v)
ddมีลักษณะแปลก ๆ ในหลาย ๆ ด้าน (เห็นได้ชัดว่ามันเป็นตัวเลือกไวยากรณ์) เพราะมันไม่ได้มาจากยูนิกซ์มันเป็นโคลนของเครื่องมือ IBM นอกจากนี้ส่วนใหญ่จะใช้สำหรับงานที่ยาวนานบนเทปดังนั้นข้อความของมันจึงบอกให้คุณกลับมาจากการหยุดพักซึ่งแตกต่างจากcpกรณีส่วนใหญ่ที่คุณเพิ่งจะกระพริบตาและได้รับการตอบกลับของคุณ
ในโลกของยูนิกซ์เครื่องมือแต่ละชิ้นได้รับการออกแบบให้ทำงานหนึ่งอย่างและทำงานได้ดี ทำไมcpต้องกังวลเกี่ยวกับความคืบหน้าในการแสดงผลเมื่อมีเครื่องมืออื่นเช่นpvนั้นอยู่แล้ว ในหลอดเลือดดำเดียวกันเหตุใดโปรแกรมจำนวนมากจึงถ่ายโอนข้อมูลไปยังหน้าจอโดยไม่มีเลขหน้า เพราะมีเครื่องมือสำหรับงานนั้นอยู่แล้วเช่นmore(หรือless) เหตุใดโปรแกรมส่วนใหญ่ที่ต้องมีการแก้ไขไฟล์ไม่ได้นำเสนอโปรแกรมแก้ไขและให้ outsource $EDITORแทน เพราะนั่นทำให้ทุกคนทำภารกิจเดียวที่พวกเขาถูกออกแบบมาให้ทำและผู้ใช้ใช้โปรแกรมแก้ไขรายการโปรดสำหรับงานทั้งหมด
โปรแกรมเชลล์ส่วนใหญ่ได้รับการออกแบบให้ส่งออกไพพ์ไปยังโปรแกรมเชลล์อื่น ๆ เอาต์พุตเดียวที่พวกเขาน่าจะให้คือสิ่งที่จะเป็นประโยชน์ในการแยกวิเคราะห์ในคำสั่งถัดไปในห่วงโซ่ โปรแกรมcpที่ใช้ในสคริปต์เช่นเดียวกับจากเทอร์มินัลด้วยตนเองดังนั้นเอาต์พุตจึงมุ่งเน้นไปที่โค้ดทางออกและรายการไฟล์ที่ล้มเหลวหรือสำเร็จ
คาดว่าจะรวมเครื่องมือต่าง ๆ เพื่อให้ได้ผลตามที่คุณต้องการ
pvอยู่เมื่อcpถูกเขียน? มันเป็นจุดที่ดี แต่ฉันมีความรู้สึกว่าในกรณีcpนี้เดิมเขียนโดยเจตนาโดยไม่มีความคืบหน้าไม่มีอะไรเกี่ยวข้องกับเครื่องมืออื่น ๆ เพียงเหตุผลอื่นที่คุณและ Gilles อ้าง
cpเป็นวิธีหนึ่งในการเข้ารหัสครั้งแรก คำถามคือว่าทำไมมันเป็นวิธีการที่ในขณะนี้ เป็นเวลาหลายปีแล้วที่บางคนอาจเพิ่มฟังก์ชั่นการใช้งาน แต่ได้ตัดสินใจอย่างชัดเจนแล้วว่าไม่ ฉันแน่ใจว่าความพร้อมใช้งานของปัจจัยเครื่องมืออื่น ๆ ในการตัดสินใจนั้น
นี่เป็นหนึ่งในสิ่งที่อยู่ตรงขอบที่มีข้อโต้แย้งและต่อต้านการเพิ่มตัวเลือกแถบความคืบหน้าไปยัง cp ข้อโต้แย้งหลักคือคุณอาจไม่ทราบล่วงหน้าว่าคุณต้องการทราบความคืบหน้า Ctrl-T / SIGINFO นั้นมีอยู่ใน BSD สำหรับจุดประสงค์นี้และถ้ามันพร้อมใช้งานบนแพลตฟอร์ม GNU / Linux อาจมีเหตุผลมากกว่านั้นที่จะทริกเกอร์ตรรกะของแถบความคืบหน้าใน cp ในขณะเดียวกันการแก้ปัญหาทั่วไปมากขึ้นคือการใช้เครื่องมือที่แยกต่างหากเช่นcoreutils ความคืบหน้า Viewer ( เดิมรู้ว่าเป็น)เพื่อแสดงสถานะของกระบวนการใด ๆ ในระบบprogresscv