Perché cp non ha una barra di avanzamento come wget?


55

Si prega di notare che non chiedo come . Conosco già opzioni come pve rsync -P.

Voglio chiedere perché non cpimplementare una barra di avanzamento, almeno come una bandiera?


7
Che ne dici di "L'autore non ne sente il bisogno"?
phunehehe,

7
Per i lettori che non lo conoscono pve rsync -P, vedere spostare i file con la barra di avanzamento ( una delle risposte cita una patch in cpmodo che cp -gfornisca un indicatore di avanzamento).
Gilles 'SO- smetti di essere malvagio' il

2
Un posto migliore da chiedere sarebbe nella nuova (dal 2010) mailing list degli utenti coreutils.
Faheem Mitha,

Risposte:


57

La tradizione negli strumenti unix è quella di visualizzare i messaggi solo se qualcosa va storto. Penso che sia sia per motivi di design che pratici. Il design ha lo scopo di renderlo ovvio quando qualcosa va storto: ricevi un messaggio di errore e non viene annegato in messaggi non realmente informativi. Il motivo pratico è che ai primissimi tempi di unix c'erano ancora le teleprinter ; cioè, l'output dei programmi verrebbe stampato su carta e non si desidera stampare barre di avanzamento.

Qualunque sia la ragione, la tradizione di mostrare solo messaggi utili è rimasta bloccata nel mondo unix. Gli strumenti moderni hanno talvolta introdotto barre di avanzamento; nel caso di rsync, la motivazione principale è che rsync viene spesso eseguito sulla rete, e le reti sono molto più sfaldate dei dischi locali, quindi la barra di avanzamento è più utile. Lo stesso ragionamento si applica a wget.


6
Questo. E cprisale ai primi anni '70: è più tradizionale che puoi.
dmckee,

3
@dmckee Allora perché posso dddare dichiarazioni sui progressi? ddrisale al 1966 (OS / 360). Gli strumenti Unix possono essere dettagliati se l'utente vuole che siano verbosi, ma sfortunatamente non si può dire come deve essere cp verbosa (c'è solo un ulteriore livello di verbosità:) -v.
Taffer

7
@taffer ddè peculiare in molti modi (più ovviamente, la sua sintassi delle opzioni) perché non proviene da unix, è un clone di uno strumento IBM. Inoltre, era principalmente usato per lunghe attività sui nastri, quindi i suoi messaggi ti dicevano di tornare dalla tua pausa, a differenza di cpdove nella maggior parte dei casi avresti semplicemente sbattuto le palpebre e ottenuto il tuo prompt.
Gilles 'SO- smetti di essere malvagio' il

16

Nel mondo unix, ogni strumento è progettato per fare un lavoro e farlo bene. Perché dovrebbe cppreoccuparsi di presentare progressi quando un altro strumento come lo pvfa già? Allo stesso modo, perché così tanti programmi scaricano roba sullo schermo senza alcuna impaginazione? Perché ci sono già strumenti per quel lavoro come more(o less). Perché la maggior parte dei programmi che richiedono la modifica di file NON presentano un editor e invece esternalizzano $EDITORinvece? Perché questo lascia tutti a svolgere l'unica attività per la quale sono stati progettati e l'utente utilizza il proprio editor preferito per tutte le attività.

Tangenzialmente, la maggior parte dei programmi di shell sono progettati per il piping dell'output in altri programmi di shell. L'unico output che sono suscettibili di fornire è ciò che sarebbe utile analizzare nel prossimo comando della catena. Programmi come cpsono usati negli script e manualmente da un terminale, quindi il suo output è focalizzato sul codice di uscita e sugli elenchi di file che hanno avuto esito negativo o positivo.

Aspettati sempre di combinare strumenti per ottenere l'effetto desiderato.


3
Esisteva pvquando è cpstato scritto? È un buon punto, ma ho la sensazione che, in questo caso, sia cpstato originariamente scritto deliberatamente senza output sui progressi, niente a che fare con altri strumenti, solo le altre ragioni per cui tu e Gilles citate.
Cascabel,

1
@Jefromi: non sono sicuro che importi. Questa non è una domanda storica sul perché cpfosse un modo quando è stato codificato per la prima volta. La domanda è: perché è così adesso ? Sono passati molti anni e qualcuno avrebbe potuto aggiungere la funzionalità, ma ha chiaramente deciso di non farlo. Sono sicuro che la disponibilità di altri strumenti abbia contribuito a tale decisione.
Caleb,

3

Questa è una di quelle cose marginali in cui vi sono argomenti a favore e contro l'aggiunta di un'opzione di barra di avanzamento a cp. L'argomento principale contro è che potresti non sapere in anticipo che vuoi conoscere i progressi. Ctrl-T / SIGINFO è disponibile su BSD per questo scopo, e se questo diventa disponibile su piattaforme GNU / Linux, potrebbe esserci più motivo per innescare la logica della barra di avanzamento in cp. Nel frattempo una soluzione più generale è quello di utilizzare uno strumento separato come il Progress Viewer Coreutils ( progress, precedentemente noto come cv) per visualizzare lo stato di qualsiasi processo sul sistema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.