Pegue o último comando executado do histórico como uma string e armazene na variável no bash

2

Estou tentando pegar o último comando executado, com opções, e armazená-lo como uma string a ser gravada em um arquivo. Eu tentei usar fc , mas isso só pode me dar o próximo a último comando (para mim de qualquer maneira) e eu também tentei !!:p que dá o comando certo quando eu digito, mas eu não consigo obter para trabalhar na própria função. Eu posso conseguir isso?

Aqui está o que está acontecendo. arg é o que eu quero que a string seja.

#!/bin/bash                                                                     

foo(){
    read HISTNUMVAR < histnum.txt
    TEMPHNV=$(fc -l 0 | grep -o '^[0-9]*');
    if [ $TEMPHNV -ne $HISTNUMVAR ]; then
        arg=$(***last history command here***);
        ./write_arg_to_file.sh $arg;
    fi
    echo $TEMPHNV > histnum.txt;
}

O script faz todo o resto que eu preciso fazer além de pegar o comando de histórico correto.

    
por Ian Panzica 17.08.2015 / 15:04

3 respostas

2

Eu consegui fazer algo funcionar. A partir de uma linha de comando, use:

history 2 | sed 's/^ *[^ ]* *//' | cut -d$'\n' -f1

De dentro do script use:

arg=$(history 1 | sed 's/^ *[^ ]* *//')

Isso salva com sucesso o comando e quaisquer opções como uma string.

    
por 17.08.2015 / 22:49
3

Há provavelmente uma maneira mais limpa, mas você pode obter o comando anterior do histórico com

prev=$(fc -ln | tail -2 | head -1)
    
por 17.08.2015 / 15:18
0

Provavelmente você precisa ativar a expansão de histórico no seu script, pois ele é desativado por padrão para uso não interativo. set -H deve fazer o truque.

Não testado, mas estou supondo que arg="!!" fará o truque.

    
por 17.08.2015 / 15:21