Acabo de enterarme del comando de pantalla en Linux: es genial. Me encanta. Sin embargo, el terminal / indicador real en la pantalla se ve y se comporta de manera diferente a mi indicador bash estándar. Es decir, los colores no son los mismos, la finalización de la pestaña no parece funcionar, etc.
¿Hay alguna manera de decirle a la pantalla que se comporte como un aviso bash normal (al menos, normal como en lo que estoy acostumbrado)?
Información Adicional
Me estoy conectando a través de ssh desde una Mac (Terminal) a una caja de linux sin cabeza (Ubuntu). Después de iniciar sesión, tengo TERM=xterm-color
y cuando ejecuto la pantalla tengo TERM=screen
.
Voy a probar las sugerencias a continuación para ver si puedo cambiar el $TERM
valor primero.
bash
gnu-screen
xterm
Thornomad
fuente
fuente
Respuestas:
Gracias a esta publicación , lo que hice fue agregar una línea a
~/.screenrc
:Entonces las cosas en su
~/.bashrc
,/etc/bashrc
, etc. deben hacerse funcionar.fuente
la pantalla cambia el tipo de término a
screen
. Puedes hacer una de las dos cosas:.screenrc
.bashrc
archivos de buscarTERM=screen
, así comoTERM=xterm
fuente
$HOME/.screenrc
archivo y agregué esta línea en la parte superior:term xterm-color
y ¡vaya! Indicador de color y los$TERM
valores coinciden. Sin embargo, no para rellenar la ficha ...$TERM
; algunas cosas permitirán con xterm y xterm-color, otras solo buscarán xterm. Otras cosas tienen otros interruptores.Me gusta la forma en que escribiste tu pregunta, me preguntaba lo mismo y me tomó un tiempo resolverlo. Tuve la suerte de saber un poco sobre la invocación de shell, así que pensé que el problema yacía en alguna parte.
Aquí están mis hallazgos. En primer lugar, personalmente me parece interesante y vale la pena saber la diferencia entre un shell de inicio de sesión y un shell sin inicio de sesión. Haz una
man $SHELL
búsqueda de la sección INVOCACIÓN para leer más sobre ella.Puede preguntarle a su instancia de shell actual si es un shell de inicio de sesión o un shell que no es de inicio de sesión emitiendo un
shopt login_shell
mensaje en su solicitud. Tenga en cuenta que esto normalmente es una opción de solo lectura.En mis sistemas Debian,
screen
siempre viene predeterminado con shells sin inicio de sesión.Después de buscar en la web y leer
man $SHELL
, probé algunas cosas y los siguientes dos enfoques funcionaron para mí. En~/.screenrc
agregar / actualizar una línea de la siguiente manera:Si eso no funciona Y lo estás usando
bash
, puedes probar alternativamente, como lo comparte Seamus :Como se mencionó, puede probar si su instancia de shell actual es un shell de inicio de sesión emitiendo
shopt login_shell
en su solicitud.fuente
cd ~/Projects ; screen ; pwd #=> ~/Projects
. Sin embargo, lo que obtengo después de agregarshell -$SHELL
a mi~/.screenrc
escd ~/Projects ; screen ; pwd #=> ~/
Dependiendo de cómo esté acostumbrado a ejecutar Bash, puede estar ejecutando un shell de inicio de sesión. Cuando ejecuta
screen
, está ejecutando un shell interactivo sin inicio de sesión.La diferencia está en qué scripts de inicio se ejecutan.
/etc/bash.bashrc
luego~/.bashrc
se obtienen cuando se inicia un shell interactivo sin inicio de sesión/etc/profile
a continuación, el primero encontrado de~/.bash_profile
,~/.bash_login
y~/.profile
se obtienen cuando se inicia una shell de entrada interactivoEsto puede estar afectando a usted.
También verificaría si
$TERM
es diferente.fuente
screen no reemplaza bash, lo ejecuta o cualquier otro shell. tal vez se está ejecutando
csh
,zsh
obash
pero con diferentes parámetros.Lo primero que intentaría es verificar
ps
y/proc/<pid>/cmdline
estar seguro de que está usando el mismo shell con los mismos parámetros que lologin
hace.después de eso, verifique
/etc/screenrc
y cualquier otro archivo mencionado en laman screen
sección ARCHIVOS.fuente
ps
comando y muestra que sebash
está ejecutando (este es un comando ps dentro de la pantalla) ... Obtuve el color funcionando (arriba) solo necesito completar la pestaña.Tuve el mismo problema, cuando ejecuté la pantalla, perdí el mensaje de color PS1 que encontré hábilmente: P.
El problema es que lo estaba ejecutando así en ~ / .bash_profile
Eso significa que cuando la pantalla estaba ejecutando bash_profile, la PS1 no se estaba transfiriendo.
La solución es fácil: agregue la exportación a la instrucción PS1 en ~. / Bash_profile para que se vea así:
Así, la variable no se pierde en la ejecución anidada.
fuente
Solo quiero agregar algo sobre "defshell -bash" (que acabo de descubrir, después de meses de rascarse la cabeza). Cuando haces eso, el shell hijo ejecutado por pantalla tiene $ SHELL establecido en "bash", en lugar de "/ bin / bash" como normalmente sería. Si luego ejecuta "script" dentro de su sesión de pantalla, obtendrá:
O al menos eso es lo que sucede en mi caja Ubuntu 14.04. La solución que he estado usando es ejecutar
$ SHELL=/bin/bash script
. Me imagino que tener $ SHELL mal configurado romperá otras cosas, pero el script es lo que he notado.fuente
Estoy usando este fragmento en mi
.profile
antes de que se inicie cualquier inicialización de shell:which screen > /dev/null 2>&1 && { screen -q -ls if [ $? -gt 10 ]; then read -p "$(tput setaf 2)Found a running SCREEN sesion, attach?$(tput sgr0)[Y/n] " y >&2 if [ "${y:-y}" = "y" -o "$y" = "Y" ]; then screen -aDR && logout fi else echo "$(tput setaf 3)No running SCREEN sessions found.$(tput sgr0)" >&2 fi }
Entonces, si no se está ejecutando una sesión de pantalla, yo ... bueno, no caigo en el indicador de comandos estándar. Hay una solicitud más para la
sudo
contraseña (ya que el 99% del tiempo me conecto para administrar el servidor), y si planeo realizar una tarea larga, cancelo el inicio de sesión de sudo, inicio la pantalla manualmente en la sesión de mi usuario y sudo allí.El punto clave aquí es "antes de cualquier inicialización de shell", de modo que cuando ya tiene una sesión de pantalla en ejecución, ya se inicializa con la configuración regional y otras cosas y no necesita volver a hacerlo.
fuente