ver usuario todos otro los fecha ejemplos configurar como comandos comando borrar bash command-line gnu-screen

bash - usuario - linux history command



Bash: ¿Cómo obtengo el historial de comandos en una sesión de pantalla? (7)

Cuando exit un terminal (o shell) el shell escribe su historial en $ HISTFILE, por lo que para obtener su historial en otro terminal puede escribir exit en el terminal del que quiere el historial y se escribirá.

cat $HISTFILE #or tac, less, $EDITOR, ... depending on how you want to "access" it

Si comienzo una sesión de screen -dmS name con la screen -dmS name , ¿cómo accedería al historial de comandos de esa sesión de pantalla con un script?

Usando , aparece el último comando ejecutado, incluso en la pantalla.


screen no mantiene un historial de los comandos que escribe. Tu caparazón puede o no mantener un historial. Como bash usar bash , puedes usar el comando history .

screen parece tener una aproximación bruta de una búsqueda de historial (simplemente busca en el búfer de desplazamiento una línea de comando. Consulte la página man de la screen bajo el comando "historial" (enlazado a Ca { de forma predeterminada).


@technosaurus tiene razón. $ HISTFILE se escribe cuando bash sale, por lo que puede salir de una sesión bash e iniciar una nueva, y la historia debería haberse conservado a través del archivo.

Pero creo que hay una mejor manera de resolver tu problema. El manual de bash incluye una descripción del comando de historia incorporado . Le permite guardar este historial con history -w [filename] y leer el historial con history -r [filename] . Si no proporciona un nombre de archivo, usará $ HISTFILE.

Por lo tanto, propondría que guarde el historial dentro de su sesión de pantalla en un archivo específico (o en su $ HISTFILE predeterminado, si lo desea). Luego, lea el archivo de historial en la otra sesión de bash desde la que desea acceder al historial. De esta forma, no tiene que salir de la sesión de bash original.


history mostrará todo el comando de historia.


use esto: pantalla -L con mayúscula L guardará una copia de la entrada y salida del terminal en un archivo llamado screenlog.0 o si usa -S para nombrarlo, el archivo de registro obtiene el nombre de pantalla


Uso el shell bash predeterminado en mi sistema y es posible que no funcione con otros shells.

esto es lo que tengo en mi archivo ~/.screenrc para que cada nueva ventana de pantalla tenga su propio historial de comandos:

Pantalla predeterminada Windows con historial de comando propio

Para abrir un conjunto de ventanas de pantalla predeterminadas, cada una con su propio archivo de historial de comandos, puede agregar lo siguiente al archivo ~/.screenrc :

screen -t "window 0" 0 bash -ic ''HISTFILE=~/.bash_history.${WINDOW} bash'' screen -t "window 1" 1 bash -ic ''HISTFILE=~/.bash_history.${WINDOW} bash'' screen -t "window 2" bash -ic ''HISTFILE=~/.bash_history.${WINDOW} bash''

Asegúrese de que Windows nuevo obtenga su propio historial de comandos

La configuración de pantalla predeterminada significa que crea una nueva ventana usando Ctrl+ac o Ctrl+a Ctrl+c . Sin embargo, con lo anterior en su archivo ~/.screenrc , estos usarán el archivo predeterminado ~/.bash_history . Para solucionar esto, sobrescribiremos los enlaces de teclas para crear ventanas nuevas. Agregue esto a su archivo ~/.screenrc :

bind c screen bash -ic ''HISTFILE=~/.bash_history.${WINDOW} bash'' bind ^C screen bash -ic ''HISTFILE=~/.bash_history.${WINDOW} bash''

Ahora cada vez que creas una nueva ventana de pantalla, en realidad está lanzando un shell bash, estableciendo la variable de entorno HISTFILE a algo que incluye el número de ventana de la pantalla actual ( $WINDOW ).

Los archivos del historial de comandos se compartirán entre sesiones de pantalla con los mismos números de ventana.

Escribir comandos en $HISTFILE en ejecución

Como es el comportamiento normal de bash, el historial solo se escribe en el archivo $HISTFILE al salir de la ventana del shell / pantalla. Sin embargo, si desea que los comandos se escriban en los archivos de historial después de que se ejecute el comando, y por lo tanto disponibles inmediatamente para otras sesiones de pantalla con el mismo número de ventana, puede agregar algo como esto a su archivo ~/.bashrc :

export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}"


Puse las siguientes líneas en mi .bashrc:

case "$TERM" in screen) declare SCREEN_NAME=$(echo $STY | sed -nr ''s/[^.]*/.(.*)//1/p'') if [[ $SCREEN_NAME ]]; then HISTFILE="${HISTFILE}.${SCREEN_NAME}.${WINDOW}" declare -p HISTFILE fi unset SCREEN_NAME ;; *) ;; esac

Mi .bashrc predeterminado tiene este ''caso'' básicamente con el valor ''xterm * | rxvt *)'', así que solo agregué mi parte de ''pantalla''. Si no tiene este ''caso'', puede usar el siguiente en lugar de este:

if [[ $TERM == screen ]]; then declare SCREEN_NAME=$(echo $STY | sed -nr ''s/[^.]*/.(.*)//1/p'') if [[ $SCREEN_NAME ]]; then HISTFILE="${HISTFILE}.${SCREEN_NAME}.${WINDOW}" declare -p HISTFILE fi unset SCREEN_NAME fi

Y después tengo un propio bash_history para todas las ventanas de mi pantalla completa .

Nota: ¡esto no funciona en chroot!