Pregunta

He escrito una función integrada para bash que modifica el comando 'cd', un requisito para mi software. ¿Hay alguna manera de distribuir realmente una cargable independientemente de bash? Idealmente me gustaría distribuir solo una caída en la "característica adicional" porque sé que la gente puede desanimarse parcheando y compilando su shell desde el código fuente.

Quiero medir el tiempo que un usuario está en un directorio para poder determinar dónde quiere estar. Es esta funcionalidad: http://github.com/joelthelion/autojump/tree/master reescrito como bash incorporado, por problemas de rendimiento. Esta implementación usa $ PROMPT_COMMAND para trabajar pero quería algo integrado.

¿Fue útil?

Solución

No está claro qué ha modificado, pero en cualquier caso, bash (como al menos ksh93 que IIRC introdujo el concepto y zsh ) admite, utilizando la sintaxis enable -f file name , cargando funciones integradas como módulos externos cargados dinámicamente.

Estos módulos, que son archivos simples, se pueden distribuir independientemente, siempre y cuando se asegure de que sean compatibles con la versión / arquitectura de destino. Esto ya era cierto hace 5 años cuando hiciste esta pregunta.

Un problema en su caso es que parece que no hay una forma documentada de sobrecargar un código interno incorporado como cd por uno cargado dinámicamente mientras se mantiene la capacidad de acceder al primero.

Una solución simple sería implementar su cd personalizado con un nombre diferente, digamos mycd, así:

int mycd_builtin(list)
WORD_LIST *list;
{
  int rv;
  rv=cd_builtin(list);
  if(rv == EXECUTION_SUCCESS) {
    char wd[PATH_MAX+1];
    getcwd(wd,sizeof(wd));
    // do your custom stuff knowing the new working directory
    ...
  }
  return (rv);
}

luego para usar un alias, o mejor, una función de shell para que se use su versión personalizada en lugar de la versión normal:

cd() {
  mycd "$@"
}

Mientras su personalización no afecte el comportamiento del comando estándar y, por lo tanto, no corra el riesgo de romper los scripts al usarlo, su enfoque no tiene nada de malo.

Otros consejos

Cambiar el CD incorporado es una pesadilla de soporte para cualquier administrador y no es bienvenido para los usuarios extranjeros. ¿Qué hay de malo en nombrarlo 'smart-cd' y dejar que el USUARIO decida si quiere la funcionalidad al incluirla en su .bashrc o .profile? Luego pueden configurar las cosas como quieran.

Además, usar cuánto tiempo ha estado en un directorio es una indicación bastante pobre de preferencia. ¿Cómo distinguiría entre el ralentí (un shell olvidado que cuelga en / tmp durante la noche), los scripts de larga ejecución (trabajos cron nocturnos) y la actividad real?

Hay muchos otros métodos para crear accesos directos a directorios favoritos: alias, enlaces suaves, $ VARIABLES, scripts. Es arrogante de su parte asumir que sus patrones de uso serán bienvenidos por otros usuarios de su sistema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top