Un comando prima di ogni comando bash


Risposte:


37

Scusami per la risposta sbagliata prima, ho capito male la tua domanda.

Per avere il tempo aggiunto prima di ogni comando che esegui sulla shell puoi fare qualcosa del genere

bind 'RETURN: "\e[1~time \e[4~\n"'

Ciò consentirà di ricollegare la chiave di ritorno. Ora ogni volta che premi Invio invece di scrivere una nuova riga \ n andrà all'inizio della riga, inserisci il testo "tempo" e uno spazio, vai alla fine della riga e inserisci la nuova riga \ n producendo così il desiderato effetto.

Se non vuoi sacrificare la tua chiave di invio puoi creare una "seconda" chiave di immissione benchmark come F12 vincolando il comando in questo modo

bind '"\e[24~": "\e[1~time \e[4~\n"'

Ora invece di sostituire la chiave di ritorno hai associato F12.

Lo sfondo di tutto ciò è che bash usa GNU readline per leggere i comandi. Quindi readline sarebbe un buon punto di partenza per un'ulteriore manipolazione dei comandi, ecc.


1
+1 bella soluzione! mi piace l'idea di avere una chiave di invio di benchmarking separata dalla normale chiave di invio.
Quack Quixote

è un'idea intelligente. Come si può generalizzare per eseguire una funzione definita dall'utente prima di ogni comando? Non so come combinare il codice bash e una funzione readline nella stessa associazione.
Gilles 'SO- smetti di essere malvagio' il

Questo non funzionerà su Mac? Ho eseguito il comando nel terminale e il mio tasto Invio non sembra fare nulla ora.
Akki

6

Mi rendo conto che questo non rientra nell'ambito di questa domanda ma ...

In zsh(che, per quanto ne sappia, è un super set di bash) se imposti la seguente variabile nel tuo .zshrcfile:

export REPORTTIME=5

Ogni comando che richiede più di 5 secondi (ne sono abbastanza sicuro) visualizzerà l'output di time. Tutti i comandi che completano più rapidamente non lo fanno. E in quei casi non ci interessa davvero, quindi è bello non ingombrare le cose. Ci sono anche molte altre funzioni interessanti zshche potresti apprezzare mentre ci sei.


Bel consiglio. Sebbene zsh abbia sicuramente un superset della funzionalità di bash , la sua sintassi non è un superset della sintassi di bash , quindi non è una sostituzione "drop in".
Chris Johnsen,

1

Includi \ t nella stringa del prompt. Includerà il tempo nel tuo prompt nel punto in cui lo includi. Vedi: http://www.ibm.com/developerworks/linux/library/l-tip-prompt/


Questa è l'ora corrente nel momento in cui viene generato il prompt, non il tempo impiegato per eseguire il comando precedente.
In pausa fino a nuovo avviso.

Vero; e la differenza tra quella e l'ora corrente del prompt successivo è il tempo di esecuzione (meno l'ora di digitazione, ovviamente - incollare è il tuo amico qui). Nessuna riassegnazione chiave necessaria.
JRobert

0

PS1 sembra il modo standard di fare qualcosa del genere.


2
Modifica il display, non l'attuale comando eseguito.
user1686

@grawity Giusto - ma ti porterebbe esattamente quello che vuoi ... il tempo assegnato a ogni riga.
Jason Sundram,

3
Che è completamente diverso da ciò che timefa (misura il tempo impiegato per l'esecuzione di un comando).
user1686

@grawity, immagino tu abbia ragione - dovresti fare tu stesso la sottrazione. Sembra che @Jrobert abbia avuto la stessa idea.
Jason Sundram,
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.