Utilizzo del comando incorporato "time" in bash anziché nel comando esterno


12

Lavorando con il timecomando, mi sono imbattuto in una situazione in cui avrei dovuto usare il timecomando time incorporato GNU piuttosto che esterno /usr/bin/time. Quindi, come posso fare questo? Ho visto da qualche parte che usare enablee / o commandaiutare, ma non lo hanno fatto.

Questo è un caso d'uso:

watch "time ls"

che utilizza il /usr/bin/timecomando esterno , che non voglio! Questo succede quando timeinvoca la funzione bash interna quando corro time lssu un terminale, in questo modo:

$ time ls

Si prega di notare che l'esatta richiesta opposta ha ricevuto risposta qui:

C'è molta differenza con due comandi. L'interno timeè più preciso (che voglio), ma il comando esterno ha più opzioni (che non mi servono).


watch 'bash -c "builtin time ls"'Forse?
Glenn Jackman,

1
guarda qui su come forzare bash a usare i builtin, vedi answer2 di Petr Utzl: builtin timedovrebbe fare il trucco.
Fiximan,

2
@Fiximan, timenon è integrato, è una bashparola riservata della lingua, quindi puoi cronometrare pipeline (come time foo | bar) o comandi composti (come time for i in...;done)
Stéphane Chazelas

Risposte:


13

Per impostazione predefinita, watchesegue il comando in /bin/sh -c '...'modo che l'output visualizzato sia come /bin/shinterpreta il timecomando. /bin/shApparentemente il tuo non ha un builtin time.

Per eseguire il comando con una shell diversa, utilizzare l' -xopzione per eliminare l'impostazione predefinita, quindi aggiungere la propria invocazione esplicita della shell di cui si desidera incorporare.

watch -x bash -c 'time ls'
watch -x zsh -c 'time ls'

Indipendentemente da come esegui watch, il comando che stai guardando non è figlio della shell che ha eseguito il watchcomando, quindi le impostazioni della shell non sono direttamente rilevanti.

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.