เหตุใด cp จึงไม่มีแถบความคืบหน้าอย่าง wget


55

โปรดทราบว่าผมไม่ได้ถามว่า ผมรู้อยู่แล้วว่าตัวเลือกเช่นและpvrsync -P

ฉันต้องการถามว่าทำไมไม่cpใช้แถบความคืบหน้าอย่างน้อยก็เป็นธง


7
แล้ว "ผู้เขียนไม่รู้สึกต้องการมัน"
phunehehe

7
สำหรับผู้อ่านที่ไม่ทราบpvและrsync -Pดูการย้ายไฟล์ที่มีแถบความคืบหน้า ( หนึ่งในคำตอบอ้างอิงแพตช์cpเพื่อcp -gให้ตัวบ่งชี้ความคืบหน้า)
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

2
สถานที่ที่ดีกว่าที่จะถามจะอยู่ในรายชื่อผู้รับจดหมายของผู้ใช้ coreutils
Faheem Mitha

คำตอบ:


57

ประเพณีในเครื่องมือยูนิกซ์คือการแสดงข้อความเฉพาะเมื่อมีสิ่งผิดปกติ ฉันคิดว่านี่เป็นทั้งสำหรับการออกแบบและการใช้งานจริง การออกแบบมีวัตถุประสงค์เพื่อให้ชัดเจนเมื่อมีสิ่งผิดปกติ: คุณได้รับข้อความแสดงข้อผิดพลาดและไม่ได้จมอยู่ในข้อความที่ไม่เป็นข้อมูล เหตุผลในทางปฏิบัติก็คือว่าในวันแรกมากยูนิกซ์ของยังคงเป็นteleprinters ; นั่นคือผลลัพธ์จากโปรแกรมจะถูกพิมพ์ลงบนกระดาษและคุณไม่ต้องการพิมพ์แถบความคืบหน้า

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


6
นี้. และcpย้อนกลับไปในช่วงต้นทศวรรษ 1970: การแข่งขันเป็นแบบดั้งเดิมที่คุณจะได้รับ
dmckee

3
@dmckee แล้วทำไมสามารถddให้งบความคืบหน้า? ddกลับไปที่ 1966 (OS / 360) เครื่องมือ Unix สามารถ verbose หากผู้ใช้ต้องการให้พวกเขาเป็นอย่างละเอียด แต่น่าเสียดายที่คุณไม่สามารถพูดว่าซีพีละเอียดจะเป็น (มีเพียงหนึ่งระดับฟุ่มเฟื่อยเพิ่มเติม: -v)
taffer

7
@taffer ddมีลักษณะแปลก ๆ ในหลาย ๆ ด้าน (เห็นได้ชัดว่ามันเป็นตัวเลือกไวยากรณ์) เพราะมันไม่ได้มาจากยูนิกซ์มันเป็นโคลนของเครื่องมือ IBM นอกจากนี้ส่วนใหญ่จะใช้สำหรับงานที่ยาวนานบนเทปดังนั้นข้อความของมันจึงบอกให้คุณกลับมาจากการหยุดพักซึ่งแตกต่างจากcpกรณีส่วนใหญ่ที่คุณเพิ่งจะกระพริบตาและได้รับการตอบกลับของคุณ
Gilles 'หยุดความชั่วร้าย'

16

ในโลกของยูนิกซ์เครื่องมือแต่ละชิ้นได้รับการออกแบบให้ทำงานหนึ่งอย่างและทำงานได้ดี ทำไมcpต้องกังวลเกี่ยวกับความคืบหน้าในการแสดงผลเมื่อมีเครื่องมืออื่นเช่นpvนั้นอยู่แล้ว ในหลอดเลือดดำเดียวกันเหตุใดโปรแกรมจำนวนมากจึงถ่ายโอนข้อมูลไปยังหน้าจอโดยไม่มีเลขหน้า เพราะมีเครื่องมือสำหรับงานนั้นอยู่แล้วเช่นmore(หรือless) เหตุใดโปรแกรมส่วนใหญ่ที่ต้องมีการแก้ไขไฟล์ไม่ได้นำเสนอโปรแกรมแก้ไขและให้ outsource $EDITORแทน เพราะนั่นทำให้ทุกคนทำภารกิจเดียวที่พวกเขาถูกออกแบบมาให้ทำและผู้ใช้ใช้โปรแกรมแก้ไขรายการโปรดสำหรับงานทั้งหมด

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

คาดว่าจะรวมเครื่องมือต่าง ๆ เพื่อให้ได้ผลตามที่คุณต้องการ


3
ไม่pvอยู่เมื่อcpถูกเขียน? มันเป็นจุดที่ดี แต่ฉันมีความรู้สึกว่าในกรณีcpนี้เดิมเขียนโดยเจตนาโดยไม่มีความคืบหน้าไม่มีอะไรเกี่ยวข้องกับเครื่องมืออื่น ๆ เพียงเหตุผลอื่นที่คุณและ Gilles อ้าง
Cascabel

1
@Jefromi: ฉันไม่แน่ใจว่ามันเป็นเรื่องสำคัญ นี่ไม่ใช่คำถามเชิงประวัติศาสตร์เกี่ยวกับสาเหตุที่cpเป็นวิธีหนึ่งในการเข้ารหัสครั้งแรก คำถามคือว่าทำไมมันเป็นวิธีการที่ในขณะนี้ เป็นเวลาหลายปีแล้วที่บางคนอาจเพิ่มฟังก์ชั่นการใช้งาน แต่ได้ตัดสินใจอย่างชัดเจนแล้วว่าไม่ ฉันแน่ใจว่าความพร้อมใช้งานของปัจจัยเครื่องมืออื่น ๆ ในการตัดสินใจนั้น
คาเลบ

3

นี่เป็นหนึ่งในสิ่งที่อยู่ตรงขอบที่มีข้อโต้แย้งและต่อต้านการเพิ่มตัวเลือกแถบความคืบหน้าไปยัง cp ข้อโต้แย้งหลักคือคุณอาจไม่ทราบล่วงหน้าว่าคุณต้องการทราบความคืบหน้า Ctrl-T / SIGINFO นั้นมีอยู่ใน BSD สำหรับจุดประสงค์นี้และถ้ามันพร้อมใช้งานบนแพลตฟอร์ม GNU / Linux อาจมีเหตุผลมากกว่านั้นที่จะทริกเกอร์ตรรกะของแถบความคืบหน้าใน cp ในขณะเดียวกันการแก้ปัญหาทั่วไปมากขึ้นคือการใช้เครื่องมือที่แยกต่างหากเช่นcoreutils ความคืบหน้า Viewer ( เดิมรู้ว่าเป็น)เพื่อแสดงสถานะของกระบวนการใด ๆ ในระบบprogresscv

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