Dlaczego CP nie ma paska postępu takiego jak wget?

55

Pamiętaj, że nie pytam jak . Znam już opcje takie jak pvi rsync -P.

Chcę zapytać, dlaczego nie cpimplementuje paska postępu, przynajmniej jako flagi?

Lamnk
źródło
7
Co powiesz na „Autor nie odczuwa takiej potrzeby”?
phunehehe
7
Dla czytelników, którzy nie wiedzą pvi rsync -Pzobacz przenoszenie plików z paskiem postępu ( jedna z odpowiedzi cytuje łatkę do cp, która cp -gdaje wskaźnik postępu).
Gilles „SO- przestań być zły”
2
Lepszym miejscem do zapytania byłaby nowa lista mailingowa użytkowników coreutils (od 2010 roku).
Faheem Mitha

Odpowiedzi:

57

Tradycją narzędzi uniksowych jest wyświetlanie komunikatów tylko wtedy, gdy coś pójdzie nie tak. Myślę, że dzieje się tak zarówno ze względów projektowych, jak i praktycznych. Projekt ma na celu uczynienie oczywistym, gdy coś pójdzie nie tak: pojawia się komunikat o błędzie i nie tonie w komunikatach, które nie zawierają informacji. Praktycznym powodem jest to, że w bardzo wczesnych czasach Uniksa nadal istniały teleprintery ; oznacza to, że dane wyjściowe z programów byłyby drukowane na papierze i nie chcesz drukować pasków postępu.

Bez względu na przyczynę tradycja wyświetlania tylko przydatnych wiadomości utknęła w świecie unixowym. Nowoczesne narzędzia czasami wprowadzały paski postępu; w przypadku rsync główną motywacją jest to, że rsync jest często wykonywany przez sieć, a sieci są znacznie bardziej niestabilne niż dyski lokalne, więc pasek postępu jest bardziej przydatny. To samo rozumowanie dotyczy wget.

Gilles „SO- przestań być zły”
źródło
6
To. I cpwraca do wczesnych lat siedemdziesiątych: jest tak tradycyjny, jak to tylko możliwe.
dmckee
3
@dmckee Dlaczego więc można ddpodawać oświadczenia o postępie? ddwraca do 1966 (OS / 360). Narzędzia uniksowe mogą być gadatliwe, jeśli użytkownik chce, żeby były gadatliwe, ale niestety nie można powiedzieć, jak szczegółowe będą cp (istnieje tylko jeden dodatkowy poziom gadatliwości:) -v.
taffer
7
@taffer ddjest specyficzny na wiele sposobów (oczywiście jego składnia opcji), ponieważ nie pochodzi z Uniksa, jest klonem narzędzia IBM. Ponadto był używany głównie do długich zadań na taśmach, więc jego komunikaty mówiły, że musisz wrócić po przerwie, w przeciwieństwie do tego, cpgdzie w większości przypadków po prostu mrugasz i odzyskujesz monit.
Gilles „SO- przestań być zły”
16

W świecie uniksowym każde narzędzie jest zaprojektowane do wykonywania jednej pracy i wykonywania jej dobrze. Po co cpmartwić się o generowanie postępu, skoro inne narzędzie pvjuż to robi? Podobnie, dlaczego tak wiele programów zrzuca rzeczy na ekran bez podziału na strony? Ponieważ istnieją już narzędzia do tego zadania, takie jak more(lub less). Dlaczego większość programów wymagających edycji plików NIE przedstawia edytora i zamiast tego zleca pracę zewnętrzną $EDITOR? Ponieważ to sprawia, że ​​wszyscy wykonują jedno zadanie, do którego zostali stworzeni, a użytkownik używa swojego ulubionego edytora do wszystkich zadań.

Stycznie, większość programów powłokowych jest zaprojektowana tak, aby ich wyjście było przesyłane do innych programów powłoki. Jedynym wyjściem, jaki mogą dać, są rzeczy, które byłyby przydatne do przeanalizowania w następnym poleceniu w łańcuchu. cpTakie programy są używane w skryptach, a także ręcznie z terminala, więc jego wynik koncentruje się wokół kodu wyjścia i list plików, które nie powiodły się lub zakończyły się powodzeniem.

Zawsze oczekuj łączenia narzędzi, aby osiągnąć pożądany efekt.

Caleb
źródło
3
Czy pvistniał, kiedy cpzostał napisany? To dobra uwaga, ale mam wrażenie, że w tym przypadku cpzostał pierwotnie napisany celowo, bez rezultatów postępu, nie ma nic wspólnego z innymi narzędziami, tylko z innych powodów, które przytaczasz Ty i Gilles.
Cascabel
1
@Jefromi: Nie jestem pewien, czy to ma znaczenie. To nie jest historyczne pytanie, dlaczego cpbył jednym ze sposobów, kiedy został po raz pierwszy zakodowany. Powstaje pytanie, dlaczego jest tak, że sposób teraz . Minęło wiele lat i ktoś mógł dodać tę funkcjonalność, ale wyraźnie postanowił tego nie robić. Jestem pewien, że dostępność innych narzędzi wpływa na tę decyzję.
Caleb
3

Jest to jedna z tych marginalnych rzeczy, w których istnieją argumenty za i przeciw dodaniu opcji paska postępu do cp. Głównym argumentem przeciwko jest to, że możesz nie wiedzieć z góry, że chcesz poznać postęp. Ctrl-T / SIGINFO jest dostępny na BSD w tym celu, a jeśli stanie się on dostępny na platformach GNU / Linux, może być więcej powodów, aby uruchomić logikę paska postępu w cp. W międzyczasie bardziej ogólnego rozwiązaniem jest użycie oddzielnego narzędzia jak na Coreutils Progress Viewer ( progressdawniej znany jako cv) , aby wyświetlić stan każdego procesu w systemie.

Pádraig Brady
źródło