Um comando antes de cada comando bash

16

Alguém sabe um meio de colocar um comando 'time' antes de cada comando em uma sessão bash?

    
por jthoenes 07.03.2010 / 20:16

4 respostas

35

Desculpe pela resposta errada antes, eu esqueci de entender sua pergunta.

Para que o tempo adicionado antes de cada comando que você executa no shell, você pode fazer algo parecido com isto

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

Isso irá religar a chave de retorno. Agora, toda vez que você pressionar return em vez de escrever uma nova linha, ele irá para o início da linha, digitará o texto 'time' e um espaço, irá para o final da linha e entrará na nova linha produzindo assim o desejado efeito.

Se você não quiser sacrificar sua chave de entrada, você pode fazer uma 'segunda' chave de referência, como a tecla F12, ligando o comando como este

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

Agora, em vez de substituir a chave de retorno, você ligou a F12.

O pano de fundo de tudo isso é que o bash usa readline do GNU para ler comandos. Então readline seria um bom ponto de partida para mais manipulação de comandos, etc.

    
por 07.03.2010 / 21:36
5

Eu percebo que isso está fora do escopo desta questão, mas ...

Em zsh (que, no meu entender, é um super conjunto de bash) se você definir a seguinte variável no seu arquivo .zshrc :

export REPORTTIME=5

Cada comando que leva mais de 5 segundos (tenho certeza) exibirá a saída de time . Todos os comandos que terminam mais rapidamente não. E nesses casos não se importa, então é bom não desordenar as coisas. Há também muitos outros recursos interessantes em zsh que você pode aproveitar enquanto está nisso.

    
por 08.03.2010 / 03:34
0

PS1 parece ser a maneira padrão de fazer algo assim.

    
por 07.03.2010 / 22:44
0

Inclua \ t na sua string de prompt. Incluirá o tempo no seu prompt no ponto em que você o incluir. Vejo: link

    
por 08.03.2010 / 01:05