A maneira padrão mais simples de imprimir o último comando bash com timestamp

7

Eu gostaria de imprimir o último comando bash com seu timestamp. history 1 mostra o comando histórico em si. Eu preciso usá-lo em muitas máquinas, por isso não deve depender de qualquer configuração personalizada. Certamente deve haver algum comando simples que estou perdendo para fazer isso, como lastcmd ou algo assim:)

Observe que fc -l -1 mostra o último comando, mas sem timestamp, e é muito complicado para digitá-lo com frequência, de qualquer maneira.

Só para esclarecer, estou procurando uma maneira padrão e simples de fazer isso, porque preciso usá-lo em muitos servidores e não é viável personalizá-los todos ou criar funções personalizadas. Também preciso digitar esse comando manualmente para que seja bem simples.

Parece que HISTCONTROL = ignoreboth é uma configuração padrão em servidores que eu preciso acessar para que eu possa usar:

 history 1 

(comando de histórico prefixado com um espaço) que não o coloca no histórico, então mostra corretamente o último comando.

HISTTIMEFORMAT não está definido por padrão, por isso não é uma solução completa. Existe uma maneira mais simples?

    
por mmm 11.06.2016 / 14:50

4 respostas

0

Parece que o bash não oferece uma maneira simples de obter o registro de data e hora quando o último comando foi executado.

Caso seja prático personalizar suas configurações bash de servidores, você pode criar uma função bash personalizada com base na resposta de @terdon.

    
por 12.06.2016 / 23:57
8

Como você aponta, history 1 imprime o comando history , pois esse é o último comando que você executou. Para obter o anterior, você precisaria de history 2 :

$ touch foo
$ history 2
$ history 2
19950  touch foo
19951  history 2

Portanto, para obter o comando anterior sem contar o history , passe-o por head -n1 :

$ history 2 | head -n1
19952  touch foo

Em seguida, adicione o carimbo de data / hora em qualquer formato desejado (consulte man 3 strftime para os formatos disponíveis):

$ HISTTIMEFORMAT="%F %H:%m:%S " history 2 | head -n1
19959  2016-06-11 15:06:08 touch foo
    
por 11.06.2016 / 14:58
0

Uma opção sem histórico que pode ajudar é também personalizar o seu shell para mostrá-lo. Eu tenho que mostrar isso e outras informações (até mesmo git branch!) Com:

HOST='\[3[02;36m\]\h'; HOST=' '$HOST
TIME='\[3[01;31m\]\t \[3[01;32m\]'
LOCATION=' \[3[01;34m\]'pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#_#g"''
BRANCH=' \[3[00;33m\]$(git_branch)\[3[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH

Isso não ajuda meu histórico, mas quando eu rola de volta no meu terminal, pelo menos eu vejo:

$ vi .bashrc
17:57:09 durrantm Castle2012 /home/durrantm 
$ pwd
/home/durrantm
17:57:10 durrantm Castle2012 /home/durrantm 
$ ls *.lt*
ls: cannot access *.lt*: No such file or directory
17:57:15 durrantm Castle2012 /home/durrantm 
$ ls *.rb*
1.rb  2.rb  3.rb  3_step_minimal_foundation_spec.rb  arrival.rb  r.rb  validate_controller.rb  x.rb*
17:57:19 durrantm Castle2012 /home/durrantm 
$ c
17:57:24 durrantm Castle2012 /home/durrantm/Dropbox/_/work/code 
$ which ruby
/home/durrantm/.rvm/rubies/ruby-2.1.2/bin/ruby
17:57:27 durrantm Castle2012 /home/durrantm/Dropbox/_/work/code 
    
por 12.06.2016 / 00:00
0

Executar

export HISTTIMEFORMAT='%F %T '

e seu arquivo de histórico registrará os horários (somente para novos comandos):

$ history 5

99576  2016-06-13 02:26:25 export HISTTIMEFORMAT='%F %T '
99580  2016-06-13 02:26:45 bash -c 'IFS=:$IFS ; set -- a b c ; echo "$@ "'
99581  2016-06-13 02:27:37 dash -c 'set a b c; IFS=; echo $*'
99582  2016-06-13 02:28:25 fc -l -1
99607  2016-06-13 02:28:25 history 5

AND

use um espaço antes do comando para evitar que seja gravado no histórico:

$  history 1
99607  2016-06-13 02:28:25 history 5

Depois, para simplificar, crie um alias:

$ alias h='history 1'

Em seguida, use-o com um espaço após o HISTTIMEFORMAT ter sido definido para:

$  h                ### Understand that there is an space in front of the command.
99607  2016-06-13 02:28:25 history 5
    
por 13.06.2016 / 08:43