โปรดทราบว่าผมไม่ได้ถามว่า ผมรู้อยู่แล้วว่าตัวเลือกเช่นและpv
rsync -P
ฉันต้องการถามว่าทำไมไม่cp
ใช้แถบความคืบหน้าอย่างน้อยก็เป็นธง
pv
และrsync -P
ดูการย้ายไฟล์ที่มีแถบความคืบหน้า ( หนึ่งในคำตอบอ้างอิงแพตช์cp
เพื่อcp -g
ให้ตัวบ่งชี้ความคืบหน้า)
โปรดทราบว่าผมไม่ได้ถามว่า ผมรู้อยู่แล้วว่าตัวเลือกเช่นและpv
rsync -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 ( เดิมรู้ว่าเป็น)เพื่อแสดงสถานะของกระบวนการใด ๆ ในระบบprogress
cv