¿Hay alguna manera de obtener el último comando ejecutado junto con los argumentos dentro de un script ksh? Estoy usando mksh con cygwin.
Lo intenté fc -nl -1
, pero el script arroja un error ""fc: funciones de historial no disponibles".
No veo un equivalente de la BASH_COMMAND
variable en ksh.
Aquí está el extracto del guión:
function trapper ()
{
printf "culprit: "
fc -nl -1
}
trap trapper ERR
grep -ic textdoesntexist test3
trapper se ejecuta una vez que grep devuelve 1, pero aparece un error fc: funciones históricas no disponibles.
Comoseñalado por Leehist
Puede ser útil, pero lo es .disponible solo con ksh93, que no tengo permitido usar.
Intenté almacenar la cadena de la línea de comando en una variable y usar esa variable dentro de la función trampero.
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, pero creo que es feo. ¿Existe una mejor salida?
Respuesta1
mksh
autor aquí ☻
La fc
utilidad incorporada accede al historial interactivo de la línea de comandos. Como ya habrás adivinado por el nombre, esto no está disponible para scripts, ya que se analizan de manera diferente (mucho más eficiente).
En términos generales, en un guión, puedessiempreconoce la última línea, de todos modos;)
Si necesita acceder al historial de un shell interactivo, defina un alias o, preferiblemente, una función en .profile
o .mkshrc
.
En su caso específico, sugiero utilizar un manejo de errores explícito, algo como:
grep -ic textdoesntexist test3 || die 'Could not grep in test3'
Ypor favor en realidadevite utilizar el modismo de compatibilidad de GNU bash &>
como operador de redirección; solo está ahí por compatibilidad, no por secuencias de comandos nuevas, y ya desaparece en -o posix
modo. Analizarlo puede romper los scripts POSIX válidos existentes.