Obtenha a última linha de comando executada em ksh

Obtenha a última linha de comando executada em ksh

Existe uma maneira de obter o último comando executado possivelmente junto com os argumentos dentro de um script ksh? Estou usando mksh com cygwin.

Eu tentei fc -nl -1, mas o script gera um erro “fc: funções de histórico não disponíveis”.

Não vejo um equivalente da BASH_COMMANDvariável em ksh.

Aqui está o trecho do script:

function trapper ()
{
  printf "culprit: "
  fc -nl -1
}

trap trapper ERR

grep -ic textdoesntexist test3

trapper é executado assim que grep retorna 1 , mas recebo um erro fc: history functions not available .

Comoapontado por Lee, histpode ser útil, mas édisponível apenas com ksh93, que não tenho permissão para usar.

Tentei armazenar a string da linha de comando em uma variável e usar essa variável dentro da função trapper.

function err_handler
{
        echo "ERR in ${cmd} trapped"
        cmd=
        return 0
}

trap err_handler EXIT ERR

cmd="grep -ic testdoesntexist test3"
${cmd} &>/dev/null

Funciona, mas acho meio feio. Existe uma saída melhor?

Responder1

mkshautor aqui ☻

O fcutilitário integrado acessa o histórico interativo da linha de comando. Como você já deve ter adivinhado pelo nome, isso não está disponível para scripts, pois eles são analisados ​​de forma diferente (com muito mais eficiência).

De modo geral, em um script, você podesempresei a última linha, de qualquer maneira;)

Se você precisar acessar o histórico de um shell interativo, defina um alias ou, preferencialmente, uma função em .profileou .mkshrc.

No seu caso específico, sugiro usar tratamento de erros explícito, algo como:

grep -ic textdoesntexist test3 || die 'Could not grep in test3'

Epor favor realmenteevite usar o idioma de compatibilidade do GNU bash &>como operador de redirecionamento; ele existe apenas para compatibilidade, não para novos scripts, e já entra em -o posixmodo. Analisá-lo pode quebrar scripts POSIX válidos existentes.

informação relacionada