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_COMMAND
variá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, hist
pode 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
mksh
autor aqui ☻
O fc
utilitá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 .profile
ou .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 posix
modo. Analisá-lo pode quebrar scripts POSIX válidos existentes.