Ocultar el directorio de trabajo actual en la terminal

133

Por defecto, el indicador de terminal muestra algo como:

user@system:/folder1/folder2/folder3/folder4$

cuanto más profundice en el sistema de archivos, menos espacio queda para escribir los comandos. ¿Puedo cambiar esto para mostrar solo algo como:

>

Quiero decir, solo puedo escribir pwdpara mostrar dónde estoy. ;)

Theodor
fuente
1
Esto debería ser un comentario pero no puedo comentar, lo siento. Además de ocultar el directorio actual, el siguiente valor de PS1 separará visualmente sus comandos bash:export PS1="\n___"
Hello World,
Experimenté con las soluciones de Oli. Las fuentes de color funcionan bien en el terminal: export PS1 = '[\ 033 [0; 35m] \ h [\ 033 [0; 33m] \ w [\ 033 [00m]:'
linbianxiaocao

Respuestas:

153
export PS1='\u@\h: '

Eso da como resultado oli@bert:mi aviso.

Si realmente quieres algo tan minimalista como lo pides, prueba esto:

export PS1='> '

Puede adjuntarlo al final de su ~/.bashrcarchivo para que persista entre inicios de sesión.

También puedes ser creativo con algunos colores. Esto es lo que uso en mis servidores:

export PS1='\[\033[0;35m\]\h\[\033[0;33m\] \w\[\033[00m\]: '

Donaciones (es más fácil de ver en un fondo negro completo):

Mis terminales

Glosario de personajes aceptables en PS1

Oli
fuente
2
También puede tener nuevas líneas (\ n) como parte de la solicitud, por lo que podría poner toda la información y el '>' en líneas separadas.
ak2
Primero encontré este tipo de personalización de shell "extrema" en msysGit, lo creas o no. Fui convertido inmediatamente al mundo de bash. Tener toda la información (mi directorio actual, la rama actual desprotegida del repositorio de Git, el estado del índice de Git ...) allí mismo fue increíble. Planeo hacer algo similar con la instalación de Ubuntu que instalé recientemente en una computadora portátil vieja (junto con Windows XP).
dgw
3
¿Cuál es el formato utilizado para configurar los colores?
Rakib
1
@SyedRakibAlHasan Pruebe echo -e "\e[31mHello World\e[0m"o echo -e "\033[31mHello\e[0m World"en una terminal, eso debería darle una pista. fuente
daka
103

Solo para ampliar la respuesta de Oli (y para que tenga un marcador para esos símbolos abreviados):

El indicador bash ( stefano@linux:~$) es solo el primero de un par de indicaciones que puede ver:

  • PS1 : el mensaje predeterminado que ves cuando abres un shell

    Su valor se almacena en una variable de entorno llamada PS1. Para ver su valor, escriba

    echo $PS1

    Esto te dará algo como

    \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

    Para cambiarlo, puede establecer un nuevo valor para la variable:

    export PS1="\u > "

    Esto dará como resultado un mensaje como este:

    stefano > 
  • PS2 : es tu solicitud secundaria. Esto se muestra cuando un comando no está terminado. Escriba echo "asdy presione enter, el indicador secundario le permitirá ingresar más líneas hasta que cierre las comillas invertidas.

  • PS3 es el indicador utilizado para select(2)

  • PS4 es el símbolo utilizado para la texto alternativo traza de la pila (por defecto: +)

Para hacer que los cambios sean permanentes, añádalos al final de .bash_profile(o .bashrc, vea esta pregunta ) en su directorio de inicio.

Aquí hay una lista más o menos completa de taquigrafía que puede usar al componer estos:

  • \a     El personaje de 'campana'
  • \A     24 horas
  • \d     Fecha (por ejemplo, martes 21 de diciembre)
  • \e     El personaje de 'escape'
  • \h     Nombre de host (hasta el primer ".")
  • \H     Nombre de host
  • \j     Número de trabajos actualmente en ejecución (ps)
  • \l     Tty actual
  • \n     Linea de alimentación
  • \t     Tiempo (hh: mm: ss)
  • \T     Tiempo (hh: mm: ss, formato 12h)
  • \r     Retorno de carro
  • \s     Shell (es decir, bash, zsh, ksh ..)
  • \u     Nombre de usuario
  • \v     Versión bash
  • \V     Cadena de lanzamiento de Full Bash
  • \w     Directorio de trabajo actual
  • \W     Última parte del directorio de trabajo actual
  • \!     Índice actual en la historia
  • \#     Índice de comando
  • \$     Un "#" si es root, de lo contrario, "$"
  • \\     Barra invertida literal
  • \@     Hora (formato de 12h con am / pm)

Por supuesto, puede insertar cualquier cadena literal y cualquier comando:

export PS1="\u \$(pwd) > "

Donde se $(pwd)coloca en lugar de "la salida de" pwd.

  • Si se escapa la sustitución del comando, como en \$(pwd), se evalúa cada vez que se muestra la solicitud, de lo contrario, como en $(pwd), solo se evalúa una vez cuando se inicia bash.

Si desea que su mensaje muestre colores, puede usar los códigos de color de bash para hacerlo. El código consta de tres partes:

40;33;01
  • La primera parte antes del punto y coma representa el estilo de texto.

    • 00 = ninguno
    • 01 = negrita
    • 04 = guión bajo
    • 05 = parpadeo
    • 07 = reverso
    • 08 = oculto
  • La segunda y tercera parte son el color y el color de fondo:

    • 30 = negro
    • 31 = rojo
    • 32 = verde
    • 33 = amarillo
    • 34 = azul
    • 35 = magenta
    • 36 = cian
    • 37 = blanco

Cada parte puede omitirse, suponiendo que comience por la izquierda. es decir, "1" significa negrita, "1; 31" significa negrita y rojo. Y obtendría su terminal para imprimir en color escapando de la instrucción con \33[y terminando con un m. 33, o 1B en hexadecimal, es el signo ASCII "ESCAPE" (un carácter especial en el conjunto de caracteres ASCII). Ejemplo:

"\33[1;31mHello World\33[m"

Imprime "Hello World" en rojo brillante.

Stefano Palazzo
fuente
Me adjuntas export PS1='\[\033[1;31m\]\w\[\033[00m\] \$> 'a /etc/bash.bashrcpero nada parecía cambiar ... funciona en una por sesión, pero me parece que no puede hacerlo permanente.
Jared Tritsch
8

Otra alternativa es acortar la ruta del directorio de trabajo cuando sea demasiado larga: recorte el directorio de trabajo del símbolo del sistema del terminal

Cree un pequeño script de Python que implemente la lógica de recorte deseada.

Ejemplo: ~ / short.pwd.py

import os
from commands import getoutput
from socket import gethostname
hostname = gethostname()
username = os.environ['USER']
pwd = os.getcwd()
homedir = os.path.expanduser('~')
pwd = pwd.replace(homedir, '~', 1)
if len(pwd) > 30:
    pwd = pwd[:10]+'...'+pwd[-20:] # first 10 chars+last 20 chars
print '[%s@%s:%s] ' % (username, hostname, pwd)

Ahora pruébelo, desde un terminal:

export PROMPT_COMMAND='PS1="$(python ~/.short.pwd.py)"'

Si está de acuerdo con el resultado, simplemente agregue el comando en su ~ / .bashrc

Olivier Lalonde
fuente
Exa ... ~ / short.pwd.py, export ... ~ / .short.pwd.py Creo que ambos tienen que ser lo mismo. O pones un comando adicional en ambos lugares o no lo haces en absoluto. Pero esta es una excelente respuesta ..
MycrofD
7

A menudo quiero hacer esto temporalmente. Esto es lo que hago:

$ export OLD_PS1=$PS1                    # save Long Prompt to OLD_PS1
$ export PS1="\u > "export PS1="\u $ "   # change to PS1 to Short Prompt
$ export PS1=$OLD_PS1                    # restore Long Prompt to PS1

Espero que esto ayude a alguien.

Joe Codeswell user601770
fuente
1

para usuarios de macOS:

open ~/.bash_profile

al final del archivo agregue la siguiente línea y guárdela

export PS1='\u:\w\$ '

resultado en el directorio de inicio:

user: ~$

aquí para el usuario w para el directorio de trabajo actual $ es solicitar que se muestre

puedes probar los siguientes estilos:

export PS1='$ '

solo tener $ como pronta, nada más. al igual que:

$ 
Sree
fuente
0

Lo que me ayudó fue: export PS1 = '$'

Para tener esto cada vez que abra la terminal, escriba el comando al final del .bashrc que puede abrir con 'cd' seguido de 'gedit .bashrc'.

Espero que esto ayude. Funcionó para mí.

Arka Mitra
fuente