The Multiple Instances Bug
Hacks
Introducción
Yo lo llamo “The Multiple Instances Bug” a manera de broma, el cual consiste en lo siguiente:
- Usando el pdksh (“Public Domain Korn Shel”) abre tres ventanas del XTerm y teclea “echo Hello from #1” en la primer ventana, “echo Hello from #2” en la segunda y “echo Hello from #3” en la tercer ventana.
- Ahora ciérralos de forma aleatoria.
- Abre una cuarta ventana y trata de llamar todos esos comandos desde el historial y verás que solamente el historial de la última ventana se guardó ya que esta sobreescribió a las otras dos.
Esto no pasa con la versión oficial del Korn Shell, el ksh93 ni tampoco con la versión de MirBSD, el mksh.
COMPLEX_HISTORY e EASY_HISTORY
Esto no es broma para la gente de pdksh ya que en el siguiente archivo:
aparece este bug como una de las prioridades a corregir:
* history
There are two versions of the history code, COMPLEX_HISTORY and
EASY_HISTORY, which need to be merged. COMPLEX does at&t style history
where the history file is written after each command and checked when
ever looking through the history (in case another shell has added
something). EASY simply reads the history file at startup and writes
it before exiting.
* re-write the COMPLEX_HISTORY code so mmap() not needed (currently
can't be used on machines without mmap()).
* Add multiline knowledge to COMPLEX_HISTORY (see EASY_HISTORY
stuff).
* change COMPLEX_HISTORY code so concurrent history files are
controlled by an option (set -o history-concurrent?). Delete
the EASY_HISTORY code.
* bring history code up to POSIX standards (see POSIX description
of fc, etc.).
que explicado en el idioma de Cervantes:
Que es lo que esta ocacionando este “bug”.
La solución propuesta a este problema es modificar el código de COMPLEX_HISTORY de tal manera que prescinda (que no necesite) de la función mmap() ya que ésta no se encuentra disponible en todas las arquitecturas.
O, escribir un mmap() propio que emule esta función en donde no esté disponible.
Asi que si tienes un tiempecito, la comunidad del software libre te estará muy agradecido.
La página oficial del pdksh es la siguiente:
Por cierto, si estás pensando “implementar” código (robar) de otros proyectos, checa muy bien las cláusulas de la licencia por favor.
Permalink: http://www.mononeurona.org/users/entry/asarch/1514
Comentblogs:









