Não é necessário usar fc
se você precisar apenas da linha de comando atual, pois a variável BASH_COMMAND
da shell contém exatamente isso. Eu apenas interceptaria o sinal DEBUG
e usaria essa variável como antes , por exemplo:
trap 'echo "$USER":"$BASH_COMMAND" >>/path/to/log' DEBUG
Isso também tem a vantagem de não escrever nada no log se você simplesmente pressionar Enter - fc
apenas lerá a última entrada da lista do histórico. Infelizmente eu não pude testar seu comando logger
no meu sistema, mas parece que funcionou bem, então isso deve funcionar também:
trap 'logger -p local1.notice -t bash -i -- "$USER":"$BASH_COMMAND"' DEBUG
Exemplo de execução
Observe como alias
es como ls
, linhas vazias ( Enter ) e os comandos typo'd são registrados.
$ trap 'echo "$USER":"$BASH_COMMAND" >>/path/to/log' DEBUG
$ uname
Linux
$ pwd
/home/dessert
$ hostname
dessert’s plowhorse
$ ls
dir1 file1 file2
$
$
$ bahs
No command 'bahs' found, did you mean:
Command 'bash' from package 'bash' (main)
Command 'bats' from package 'bats' (universe)
bahs: command not found
$ cat /path/to/log
dessert:uname
dessert:pwd
dessert:hostname
dessert:ls --color=auto
dessert:bahs
dessert:cat /path/to/log