Me parece que hago mucho trabajo en un proyecto en un directorio establecido. A veces, unos meses después, necesito rehacer algo en ese proyecto, pero no puedo recordar lo que hice. Uso mercurial o git para rastrear los cambios en los archivos, pero quiero poder recordar qué comandos emití en ese directorio.
Buscar en mi historial de shell no es muy informativo. Ya registro todo en mis archivos de historial. * _, Pero quiero una lista de las cosas que hice en ~ / foo / bar, y no todas las otras (millones) cosas que hice esa semana. Probablemente ni siquiera puedo recordar en qué mes trabajé por última vez en ese proyecto en particular.
¿Alguien tiene alguna idea de cómo un archivo de registro de directorio de proyecto de todos los comandos de shell que he usado? Estoy imaginando un comando algo como:
workon myproject
... que establecería el archivo de registro de shell en ~ / myproject / .history.log, cargaría el historial anterior de ese archivo de registro y quizás actualizaría mi mensaje para decirme en qué directorio estoy trabajando (como, por ejemplo, vcprompt para proporcionar la versión información de control).
¿Hay algo por ahí como este?
Puede que le interese un complemento que escribí llamado directorio-historial para zsh.
Mira aquí: https://github.com/tymm/directory-history
Aunque en realidad no se ajusta a su trabajo en el flujo de trabajo de myproject , debería adaptarse perfectamente a sus necesidades.
Crea una historia que incluye directorios.
Cuando busque en su historial, primero obtendrá los comandos del directorio en el que se encuentra.
Si no quedan comandos para ese directorio, recurrirá a un historial global y sugerirá los comandos utilizados en otros directorios.
fuente
Si desea algo simple, puede tener su
.history.log
archivo como tal:A continuación, ejecute el archivo con
cat
los comandos que enumeró en él.También puede agrupar esos comandos en archivos separados por funcionalidad como convención:
Esto tiene la ventaja adicional de trabajar fuera de la caja y no contaminar su entorno.
fuente
README.md
o crear otros.md
archivos por tema y señalarlos desde el archivo Léame. Eso si tiene una interfaz de control de fuente amigable de reducción.Para obtener un archivo de historial local para un directorio, agregué la siguiente línea a mi comando bash prompt.
if [ -f .local_history ] ; then tail -1 $HISTFILE >> .local_history ; fi
El comando
touch .local_history
en un directorio me da un archivo de historial local para todos los comandos ejecutados en ese directorio, sin perder el archivo de historial principal. Algo similar funcionaría en zsh, supongo.fuente
Al menos en bash, HISTFILE solo se consulta al inicio de la instancia de shell. La idea por directorio no funcionará aquí, a menos que su ejemplo 'workon' anterior cree una instancia de shell.
Tal vez puedas mirar algo como
Pero el script también crea una subshell.
En resumen, probablemente necesitará niveles desordenados de subcapas para que esto funcione.
fuente
He trabajado en casas de software de producción donde simplemente creamos nuevos usuarios y grupos para diversas funciones. Las nuevas cuentas de usuario específicamente para la gestión de la configuración o las compilaciones de software con niveles variables de visibilidad en otras áreas funcionales relacionadas a través de la pertenencia a grupos y ACL, y el historial de comandos realizado por say, se
cmmgr
guardaría~cmmgr/.bash_history
,bldmgr
las palabras relacionadas se guardarían~bldmgr/.bash_history
, etc. Desafortunadamente, para iniciar sesión, un usuario debe ser propietario de su directorio de inicio de sesión. Por lo tanto, se configuró un área de proyecto en un disco separado por completo. La propiedad del creador del archivo mostró qué área funcional creó los archivos en el área del proyecto, para lo cual.bash_history
se puede examinar el apropiado .Sin embargo, el enfoque anterior no le brinda la granularidad que desea, sin embargo, le brinda un esqueleto que, cuando se combina con la pertenencia a un grupo, un usuario podría cambiar de grupo con lo
newgrp
que efectivamente crea un nuevo shell y entorno, y luego usar uno de los enfoques dados en las otras respuestas para alterar el~/.bash_history
archivo efectivo al cambiar sombreros para decir, decmmgr
modo que senewgrp
pueda administrar cuál~/.bash_history
se usa y guarda por carpeta a medida que uno ingresa y sale del nuevo grupo a través delnewgrp
comando. Echa un vistazoman newgrp
. Hay algunos puntos de partida a lo largo de estas líneas en otras respuestas a esta pregunta. Estos deberían funcionar con el paradigma de grupo UNIX: la mayoría de las tuercas y tornillos son manejados por las rutinas de inicio y salida de shell controladas pornewgrp
invocación. Echa un vistazo anewgrp -l
:fuente
Aquí presento dos variantes, pero aplicables solo a Z Shell .
Variante 1
Esto es lo que pensé por primera vez al leer el título de su pregunta. Con esta variante, puede cambiar entre dos modos de historial con ALT+ h: Global o local , donde este último cambia automáticamente a un historial por directorio en chdir . La historia global acumula todos los comandos emitidos.
Demostración
El guión (para incluir
~/.zshrc
o para obtener)Variante 2
Pensándolo de nuevo, parece que el historial por directorio es demasiado detallado y también describe más un historial por proyecto en su cuerpo de preguntas. Así me ocurrió con otra variante con un workon función para cambiar entre proyectos. Cada proyecto tiene su propio archivo de historial
~/.zsh_projhistory_[name]
.Demostración
El guión (para incluir
~/.zshrc
o para obtener)fuente
Después de trabajar en un área por un tiempo.
history> hist1.txt luego historia> hist2.txt
A veces uso la fecha para el nombre del archivo. historia> hist20180727.txt
De esta manera hay un historial de comandos reciente para cada directorio.
fuente