Retorna o último comando executado no shell-script

5

Em um script bash eu gostaria de recuperar o último comando que foi executado. No bash, o seguinte comando funciona como um encanto.

lastCommand=$(echo 'history |tail -n2 |head -n1' | sed 's/[0-9]* //')

Dentro dos scripts, no entanto, o histórico não funciona de todo.

Existe uma maneira de recuperar o comando dentro de um script?

    
por Hedge 25.07.2012 / 14:22

2 respostas

5

Para o bash v4 +:

Use o modo interativo no shell.

Defina a she-bang como

#!/bin/bash -i

e history dentro do seu script funcionarão.

 $ cat test.sh
#!/bin/bash
history | wc -l
 $ ./test.sh
0
 $ sed -i '1s/bash/bash -i/' test.sh
 $ ./test.sh
6495

Comandos executados dentro do script não são registrados no histórico.

Para o bash v3 (e possível para os mais antigos)

  • O caminho acima não funciona para este vesions de bash. No entanto, você pode remover a she-bang e a história funcionará bem. Desta forma também funciona muito bem para o bash v4.

  • defina she-bang como interativa e não se esqueça de set -o history como chepner mencionado.

#!/bin/bash -i
set -o history

PS. history |tail -n2 |head -n1 não é igual ao último comando. é o comando antes do último.

Note que se os comandos last ou prelast forem multilinhas, não retornará o resultado correto.

btw no console, você pode usar !-2 para se referir ao comando prelast em vez de sua construção estranha. infelizmente parece que não funciona em shell script, mesmo no modo interativo.

    
por 25.07.2012 / 14:31
1

Isso ajuda?

lastCommand=$('cat ~/.bash_history |tail -n2 |head -n1' | sed 's/[0-9]* //')

Ou talvez isso:

echo !!

Como o bash tem um build em instalações para fornecer o último comando

    
por 25.07.2012 / 14:28