Um comando antes de cada comando bash


Respostas:


37

Desculpe pela resposta errada antes, não entendi sua pergunta.

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

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

Isso religará a chave de retorno. Agora, toda vez que você pressionar return, em vez de escrever uma nova linha \ n, ela irá para o início da linha, digite o texto 'time' e um espaço, vá para o final da linha e digite a nova linha \ n, produzindo assim a desejada efeito.

Se você não quiser sacrificar sua tecla Enter, poderá criar uma segunda chave de referência como F12, vinculando o comando como este

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

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

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


11
+1 boa solução! Eu gosto da idéia de ter uma tecla enter de benchmarking separada da tecla enter normal.
quack quixote

essa é uma ideia inteligente. Como você pode generalizá-lo para executar uma função definida pelo usuário antes de cada comando? Não sei como combinar o código bash e uma função readline na mesma ligação.
Gilles 'SO- stop be evil'

Isso não será executado no Mac? Executei o comando no terminal e minha tecla enter parece não fazer nada agora.
akki 16/09/19

6

Sei que isso está fora do escopo desta pergunta, mas ...

Em zsh(que, é do meu conhecimento, um super conjunto de bash) se você definir a seguinte variável em seu .zshrcarquivo:

export REPORTTIME=5

Todo comando que leva mais de 5 segundos (tenho certeza) exibirá a saída de time. Todos os comandos que são concluídos mais rapidamente não são. E nesses casos, realmente não se importa, por isso é bom não bagunçar as coisas. Também existem muitos outros recursos interessantes zshque você pode aproveitar enquanto está nisso.


Boa dica. Embora o zsh certamente tenha um superconjunto da funcionalidade do bash , sua sintaxe não é um superconjunto da sintaxe do bash , portanto, não é uma substituição do tipo "drop in".
quer

1

Inclua \ t na sua string de prompt. Isso incluirá o horário no seu prompt no ponto em que você o incluir. Consulte: http://www.ibm.com/developerworks/linux/library/l-tip-prompt/


Esse é o horário atual no momento em que o prompt é gerado, não o tempo que levou para executar o comando anterior.
Pausado até novo aviso.

Verdade; e a diferença entre esse e o horário atual do próximo prompt é o tempo de execução (menos o tempo de digitação, é claro - colar aqui é seu amigo). Não são necessárias redesignações importantes.
JRobert # 8/10

0

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


2
Ele modifica a exibição, não o comando executado real.
user1686

@ Grarawity Certo - mas você obteria exatamente o que deseja ... o tempo precedido para cada linha.
Jason Sundram

3
O que é completamente diferente do que timefaz (mede quanto tempo levou para que um comando fosse executado).
user1686

@ Grarawity, acho que você está certo - você teria que fazer a subtração sozinho. Parece que @Jrobert teve a mesma idéia.
Jason Sundram
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.