¿Cómo tener un historial de comandos separado para diferentes sesiones para el mismo usuario?

8

Me enfrento a este problema en algunos servidores Unix. Cuando abro una sesión diferente para el mismo usuario, toda la sesión comparte el historial de comandos. Esto crea problemas si por error presiono Ctrl-Po up arrowy solo presiono Enter. En una ocasión termino corriendo rm -rf *afortunadamente, estaba en el directorio donde no tengo permisos para eliminar archivos.

¿Cómo tener un historial de comandos separado para diferentes sesiones para el mismo usuario? La mayoría de las veces estoy usando shells ksh y tcsh.

Hemant
fuente

Respuestas:

8

Del ksh faq :

Q1. ¿Cómo obtengo archivos de historial separados para shell?

A1. ksh usa un archivo de historial compartido para todos los shells que usan el mismo nombre de archivo de historial. Esto significa que los comandos ingresados ​​en una ventana serán vistos por shells en otras ventanas. Para obtener ventanas separadas, la variable HISTFILE debe establecerse con un nombre diferente antes de crear el primer comando de historial.

el otro recibir
fuente
11

Puedes agregar HISTFILE=~/.hist$$a tu .profile. Esto debería generar un archivo único por sesión.

Terminará con una gran cantidad de, .hist*así que le sugiero que los quite ocasionalmente.

Gert
fuente
2

Asumo que estás hablando de sesiones simultáneas; separar las sesiones que se suceden no es muy útil: ya nunca más podrás usar su historial, porque todas las sesiones serían únicas. Si ese fuera el caso, probablemente sería mejor deshabilitar el historial de comandos.

Si estamos hablando de separar sesiones simultáneas, te recomiendo que uses Bash. Estoy bastante seguro de que no obtengo el historial de comandos de dos sesiones simultáneas mezcladas con él. Bash solo escribe el historial al .bash_historycerrar sesión, por lo que el historial de comandos no se mezclará hasta después del cierre de sesión. Siempre que el uso de Bash sea aceptable, ¿eso resolvería su problema?

wzzrd
fuente
gracias por su respuesta. Estoy trabajando en HP-UX y no tiene instalado bash y no tengo permiso para instalarlo :(.
Hemant
1

Añadiré algo a la respuesta de Gert.

Gert's

Puede agregar HISTFILE = ~ / .hist $$ a su .profile. Esto debería generar un archivo único por sesión.

Mía

Puede eliminar estos archivos automáticamente agregando lo siguiente.

trap 'rm ${HISTFILE}' exit

Robert Jacobs
fuente
2
Sea un poco circunspecto con las trampas de salida (el shell no las apila como podría esperar), por lo que cualquier configuración adicional de una trampa de salida sobrescribirá todas las anteriores. Escribí un apilador para trampas, pero casi explotó todos los fusibles mentales que tenía.
David Collier
-1

Podrías usar la pantalla . También hice una variable que fue definida por mi perfil de konsole y le di a cada una de las sesiones un archivo de historial diferente , solo de maneras que puedo pensar.

xenoterracida
fuente
No puedo instalar la pantalla. ni siquiera está compilando en mi servidor.
Hemant
No estoy seguro de cómo la pantalla te daría esa capacidad de todos modos
Michael Mrozek
@Michael puedes tener diferentes sesiones con pantalla y la pantalla tiene su propio historial. No sé si alguien me dijo que resolviera mi problema con la pantalla ... No me gustó la pantalla. Lamento que esto se haya modificado cuando mi segunda respuesta es esencialmente la misma que las otras que se modificó. @Hemant ... ¿y se suponía que debía saber eso? No uso la pantalla para hacer esto en mi sistema. Solo sé que permite un efecto similar bien hecho.
xenoterracide
Creo que sé lo que estás describiendo, pero no es una función de pantalla, es solo un efecto secundario de la forma en que funcionan los shells. Si abre dos shells, los comandos escritos en uno no se mostrarán en el historial del otro a menos que el shell lo admita específicamente (por ejemplo, ZSH sí, pero debe habilitarlo explícitamente). No mantiene historiales separados, ambos escriben en el archivo de historial principal, simplemente no puede ver los cambios de cada shell porque generalmente los shells no verifican los cambios del archivo de historial una vez que se han cargado
Michael Mrozek
@MichaelMrozek El shell korn tiene un historial compartido para todas las ventanas, esto no se puede deshabilitar. Usar screenno ayudará en absoluto.
FUZxxl