Pamiętaj, że nie pytam jak . Znam już opcje takie jak pv
i rsync -P
.
Chcę zapytać, dlaczego nie cp
implementuje paska postępu, przynajmniej jako flagi?
wget
cp
architecture
Lamnk
źródło
źródło
pv
irsync -P
zobacz przenoszenie plików z paskiem postępu ( jedna z odpowiedzi cytuje łatkę docp
, któracp -g
daje wskaźnik postępu).Odpowiedzi:
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.
źródło
cp
wraca do wczesnych lat siedemdziesiątych: jest tak tradycyjny, jak to tylko możliwe.dd
podawać oświadczenia o postępie?dd
wraca 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
.dd
jest 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,cp
gdzie w większości przypadków po prostu mrugasz i odzyskujesz monit.W świecie uniksowym każde narzędzie jest zaprojektowane do wykonywania jednej pracy i wykonywania jej dobrze. Po co
cp
martwić się o generowanie postępu, skoro inne narzędziepv
już 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 jakmore
(lubless
). 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.
cp
Takie 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.
źródło
pv
istniał, kiedycp
został napisany? To dobra uwaga, ale mam wrażenie, że w tym przypadkucp
został 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.cp
był 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ę.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 (
progress
dawniej znany jakocv
) , aby wyświetlić stan każdego procesu w systemie.źródło