Capture e decore cada comando antes da execução

3

Eu preciso interceptar cada comando que eu digito na linha de comando, de modo que eu possa decorar eles.

Por exemplo, sempre que eu digitar echo Hi , o que eu realmente quero que seja executado é /bin/wrapper "echo Hi" .

Existe alguma maneira de conseguir isso no bash, exceto pela recompilação dele?

EDIT: Além disso, for _ in 1 2; do ping -c1 google.com; done deve se tornar /bin/wrapper "for _ in 1 2; do ping -c1 google.com; done"

    
por Giuseppe 06.06.2017 / 17:39

2 respostas

2

Você pode fazer isso com bash-preexec .

Faça o download do script:

wget 'https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh'

fonte do script:

source 'bash-preexec.sh'

Agora, de acordo com suas notas de uso :

Two functions preexec and precmd can now be defined and they'll be automatically invoked by bash-preexec if they exist.

preexec Executed just after a command has been read and is about to be executed. The string that the user typed is passed as the first argument.

precmd Executed just before each prompt. Equivalent to PROMPT_COMMAND, but more flexible and resilient.

Você pode usá-los da seguinte forma:

preexec() { echo "just typed $1"; }

precmd() { echo "printing the prompt"; }

Também pode valer a pena mencionar que o bash-preexec é apenas um script de shell que é implementado usando a variável de ambiente DEBUG e PROMPT_COMMAND .

Para obter mais informações sobre o DEBUG trap, consulte a documentação de referência do comando trap :

Para mais informações sobre a variável de ambiente PROMPT_COMMAND , consulte o manual de Bash:

por 23.11.2017 / 21:52
0

Isso é possível em Zsh . O Zsh é um shell amplamente usado que usa uma linguagem que é basicamente um superconjunto do bash e foi projetada para ter uma interface do usuário muito personalizável.

No Zsh, você pode definir uma função arbitrária para ser executada quando você pressionar enter. Isso pode fazer coisas arbitrárias no conteúdo da linha. (Veja o widget accept-line ). Uma solução é, portanto, mudar para o uso do Zsh.

    
por 25.11.2017 / 23:07

Tags