Terminal, Aviso cambiado a "-Bash-4.2" y los colores perdidos

8

Por lo general, mi mensaje de terminal era

username place$

ahora solo muestra

bash-4.2$

y todos los ajustes de color se han perdido (en el perfil del terminal tengo el mismo esquema de color, pero simplemente no muestra colores)

No tengo idea de lo que sucede (y no sé cómo buscar esto).

Cambia de la nada, estaba trabajando con eclipse y maven, abrí una nueva terminal y la nueva terminal no tenía colores.

Nota: No tengo un archivo ~ / .bashrc, pero tengo un ~ / .bash_profile.

jurado
fuente
El indicador lo establece la variable PS1, aquí puede leer más sobre esto, también hay varios ejemplos de mensajes de colores
RSFalcon7 el
¿Esto sucede 1) solo cuando inicia sesión en una consola, 2) solo cuando abre un nuevo terminal GUI, 3) tanto 1 como 2? Si no está seguro sobre el n. ° 1, cambie a un VT e inicie sesión, o intente bash -l.
Ricitos
@ TAFKA'goldilocks 'ambos, si uso bash -l los colores vuelven, pero el mensaje sigue en "bash-4.2 $"
lcjury
Si mi respuesta no funciona, publique el resultado echo $PS1en la versión de inicio de sesión con los colores.
Ricitos

Respuestas:

10

La variable de solicitud $PS1probablemente no se configuró, por lo que \s-\v\$se utiliza el valor predeterminado incorporado .

Cuando bash se inicia de forma interactiva, obtiene un archivo de configuración, generalmente ~/.bashrco bien ~/.bash_profile, suponiendo que existan, y así es como se configura un indicador más sofisticado. De man bash:

INVOCACIÓN

[...] Cuando se invoca bash como un shell de inicio de sesión interactivo, o como un shell no interactivo con la opción --login, primero lee y ejecuta comandos del archivo / etc / profile, si ese archivo existe. Después de leer ese archivo, busca ~ / .bash_profile, ~ / .bash_login y ~ / .profile, en ese orden [...]

[...] Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta comandos desde ~ / .bashrc, si ese archivo existe.

No tener su conjunto de avisos puede ocurrir en dos contextos diferentes entonces, shells de inicio de sesión y shells sin inicio de sesión. Si utiliza un administrador de pantalla para iniciar sesión directamente en la GUI, no encontrará shells de inicio de sesión a menos que cambie a una consola virtual (a través de, por ejemplo, CtrlAlt+ F1 a F6). Sin embargo, puede poner a prueba su perfil de inicio de sesión de bash en la interfaz gráfica de usuario mediante la apertura de un nuevo shell de entrada de forma explícita: bash -l.

El problema ocurre con los shells que no son de inicio de sesión

Si el problema ocurre con, por ejemplo, terminales GUI normales, entonces ~/.bashrcfalta el tuyo o se ha editado para excluir el abastecimiento de un archivo global, probablemente /etc/bashrc.

  • Si ~/.bashrcno existe, debería /etc/skel/.bashrcusarse para crearlo para nuevos usuarios. Simplemente copie ese archivo en su directorio de inicio, y su solicitud predeterminada debería volver para el próximo nuevo shell que abra.

  • Si ~/.bashrcexiste, verifique si hay una línea en alguna parte que las fuentes /etc/bashrc:

    . /etc/bashrc
      -OR-
    source /etc/bashrc
    

    De lo contrario, verifique si ese archivo existe (debería, al menos en la mayoría de las distribuciones de Linux) y agregue dicha línea a su ~/.bashrc.

Se produce un problema con los shells de inicio de sesión

Si el problema ocurre con los shells de inicio de sesión, así como con los shells que no son de inicio de sesión, probablemente el problema sea el mismo que el anterior. Si ocurre solo con shells de inicio de sesión, no tiene uno de los archivos mencionados para shells de inicio de sesión en la cita de INVOCACIÓN anterior, o no obtienen su fuente ~/.bashrc, lo cual es normal en la mayoría de las distribuciones de Linux. Si ninguno de esos archivos existe, cree ~/.bash_profilecon esto en él:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

Esto le permite, en su mayor parte, mantener su configuración en un archivo ( ~/.bashrc).


Si no importa lo que haga, no puede obtener un aviso de regreso, puede crear uno y ponerlo de ~/.bashrcesta manera:

if [ "$PS1 ]; then
    PS1= .... # see below
fi

Esto se debe a que $ PS1 está configurado y tiene un valor predeterminado para shells interactivos, y no desea establecerlo de otra manera, ya que otras cosas pueden usar este valor para determinar si se trata de un entorno interactivo.

La página de manual de bash contiene una sección PROMPTING que describe cómo configurar una solicitud con características dinámicas como su nombre de usuario y directorio de trabajo actual, que sería, por ejemplo,:

PS1="\u \w:"

Hay una guía para usar el color aquí . Preste atención al hecho de que debe incluir caracteres no impresos \[y \](al final de la respuesta hay una discusión sobre los colores).

encerrada dorada
fuente
Gracias TAFKA !, más que solo una respuesta, ¡aprendí algo nuevo :)!
lcjury
1

Simplemente pegue esto en ~ / .bashrc y ~ / .bash_profile como root en el usuario afectado.

# Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi

Aziz Zoaib
fuente
0

Tuve que actualizar Cygwin bash por razones de seguridad.

the old bash = 4.1.10 (4) -release (i686-pc-cygwin) circa 2009

$ echo $PS1

\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

the new bash = 4.4.12 (3) -release (i686-pc-cygwin) circa 2016

Para obtener exactamente la misma apariencia, se tuvo que agregar a .bashrc:

#

GREEN="\[$(tput setaf 2)\]"

YELLOW="\[$(tput setaf 3)\]"

RESET="\[$(tput sgr0)\]"

PS1="\n${GREEN}\u@\h ${YELLOW}\w${RESET}\n$ "

cd $HOME

#

nota: incluyendo el cd $HOME

Randy Sp
fuente