Invoca um script para cada comando digitado no prompt do shell?

2

No bash, existe alguma maneira simples de executar um comando a cada vez que outro comando é inserido no seu shell?

Eu sei sobre 'trap ... DEBUG', mas infelizmente ele não executa o código especificado para cada comando. Por exemplo:

$ trap 'echo "COMMAND: $BASH_COMMAND"' DEBUG
$ ls
COMMAND: ls --color
[output of ls]

Mas:

$ (for a in 'seq 1 10'; do echo -n "$a "; done;)
1 2 3 4 5 6 7 8 9 10

Eu gostaria de algo que me daria "COMMAND: (para um in ...)", por exemplo, qualquer comando inserido no prompt.

    
por rabexc 09.08.2013 / 17:47

1 resposta

4

Você pode usar

PROMPT_COMMAND='printf "COMMAND:%s\n" "$(fc -ln|tail -1)"'

que imprime o comando anterior após sua saída (antes do próximo prompt)

$ PROMPT_COMMAND='printf "COMMAND:%s\n" "$(fc -ln|tail -1)"'
COMMAND:     PROMPT_COMMAND='printf "COMMAND:%s\n" "$(fc -ln|tail -1)"'
$ ls
32-but ubuntu-gnome/  IE9 - Win7/
[output of ls]
COMMAND:     ls
$ (for a in 'seq 1 10'; do echo -n "$a "; done;)
1 2 3 4 5 6 7 8 9 10 COMMAND:    (for a in 'seq 1 10'; do echo -n "$a "; done;)
$ 
    
por 09.08.2013 / 18:36