Use o comando “history” para disparar o comando last run?

2

Como eu uso o comando "history" para disparar o último comando de execução?

    
por ajsie 14.10.2010 / 13:07

3 respostas

8

Você não faria isso. Você usaria !! .

    
por 14.10.2010 / 13:09
6

Como Ignacio disse, use !! , mas se você insistir:

$(history | sed '$d' | sed -n '$p' | cut -d ' ' -f 3-)

Explicação:

  • $() executa a saída do comando dentro de
  • sed '$d' exclui o último comando, por exemplo, 2001 $(history | sed '$d' | sed -n '$p' | cut -d ' ' -f 3-)
  • sed -n '$p' imprime apenas a última linha, ou seja, 2000 yourpreviouscommand
  • cut -d ' ' -f 3- remove os três primeiros campos, separados por espaços, ou seja, <space>2000<space>

Acho que pode ser mais conciso e robusto, mas funciona por enquanto.

Editar : se você quiser usar history em vez de !! , porque o shell que você está usando não tem !! , você está sem sorte; history é um shell embutido, não um programa. E os shells simples provavelmente não o terão se não tiverem !! . Por exemplo, o traço não:

imgx64@home:~$ dash
$ history
dash: history: not found
$ 
    
por 14.10.2010 / 13:24
3

No Bash, o comando fc pode fazer o que você está procurando.

De man bash :

...
In the second form, command is re-executed after each instance of pat is replaced by rep. A useful alias to use with this is r="fc -s", so that typing r cc runs the last command beginning with cc and typing r re-executes the last command.
...

    
por 14.10.2010 / 16:30