En un sistema con Ubuntu 14.04 y bash
, tengo la PS1
variable que termina con los siguientes contenidos:
\u@\h:\w\$
para que el mensaje aparezca como
user@machinename:/home/mydirectory$
A veces, sin embargo, el directorio actual tiene un nombre largo, o está dentro de directorios con nombres largos, de modo que el indicador se ve como
user@machinename:/home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name$
Esto llenará la línea en la terminal y el cursor irá a otra línea, lo cual es molesto.
En cambio, me gustaría obtener algo como
user@machinename:/home/mydirectory1/...another_long_name$
¿Hay alguna manera de definir la PS1
variable para "ajustar" y "compactar" el nombre del directorio, para que nunca exceda un cierto número de caracteres, obteniendo un mensaje más corto?
Respuestas:
En primer lugar, es posible que simplemente desee cambiar el
\w
con\W
. De esa manera, solo se imprime el nombre del directorio actual y no su ruta completa:Es posible que aún no sea suficiente si el nombre del directorio en sí es demasiado largo. En ese caso, puede usar la
PROMPT_COMMAND
variable para esto. Esta es una variable bash especial cuyo valor se ejecuta como un comando antes de que se muestre cada solicitud. Entonces, si establece eso en una función que establece su solicitud deseada en función de la longitud de la ruta de acceso de su directorio actual, puede obtener el efecto que busca. Por ejemplo, agregue estas líneas a su~/.bashrc
:El efecto se ve así:
fuente
Agregar un retorno de caracteres es mi solución principal para esto
Entonces mi aviso (que también tiene otras cosas, haciéndolo aún más largo) se ve así:
Notarás que los $ se devuelven como una nueva línea
Lo logro con
Tenga en cuenta que, aunque en una línea separada, los árboles de directorios súper largos como
/home/durrantm/Dropbox/96_2013_archive/work/code/ruby__rails
se acortan aes decir, "los 3 directorios principales / _ / dos directorios inferiores", que generalmente es lo que me importa
Esto asegurará que la línea nunca se alargue demasiado debido a la longitud del árbol de directorios. Si siempre desea el árbol de directorios completo, simplemente ajuste LOCATION, es decir
fuente
$
? (Vea esto .)Creado ~ / .bash_prompt:
Agregado en mi ~ / .bash_profile:
Salida es:
fuente
No es una solución para acortar caminos largos, pero una forma conveniente de obtener una mejor visión general mientras se mantiene visible toda la información del camino, es agregar una nueva línea antes del último carácter. De esta manera, el cursor comienza siempre en la misma columna, incluso si la ruta es lo suficientemente larga como para ajustarse, pero las ventanas de la consola deben ser lo suficientemente altas como para no desplazarse demasiado rápido por las líneas anteriores. Eliminé los códigos de color para mayor claridad:
fuente
Utilizo esto, se envuelve en varias líneas y sangra por la longitud de
user@host
lo que supone que la corrientePS1
es efectiva '\u@\h:\w$
'. No trunca la ruta y se adapta al ancho actual del terminal. Solo divide la ruta/
, por lo que no trata con elegancia directorios muy largos (pero conserva espacios para selección / copia). Se asegura de que siempre tenga al menos un espacio de 20 caracteres disponible para la entrada.Esto funciona sacando la magia
\w
(coincide solo\w$
con esto)PS1
y reemplazándola por$PWD
, luego envolviéndola como una cadena simple de caracteres. Se vuelve a calcularPS1
cada vez que se guarda el valor original, lo que_PS1
significa que los escapes "invisibles" también se conservan, mi cadena de solicitud original completaxterm
y la solicitud en negrita:Y el resultado final en un terminal de 80 columnas:
Esto funciona desde bash-3.2 como
printf -v var
se usa. Debido a diversas complejidades , necesitará algún ajuste para otras variaciones dePS1
.(La ruta en la barra de título de xterm no está ajustada ni abreviada, algo que podría hacerse incorporando una de las otras respuestas aquí en la función anterior).
fuente
Como alternativa, en mi .zshrc abrevío la primera letra de cada directorio si el ancho del píxel supera un cierto ancho:
se convierte en:
Aquí está la función zsh para hacerlo:
De hecho, uso esto para actualizar el título del terminal para que con varias pestañas, pueda mantener en claro qué pestaña es cuál. El .zshrc completo para hacer esto está aquí .
Esto es muy útil ya que mantiene el contexto y en zsh le permite completar rápidamente un directorio en el mismo formato. (por ejemplo, escribir
cd /h/m/s/<tab>
se completará automáticamentecd /home/mydirectory1/second_directory
)fuente
Intenta usar este script de Python . Corta secciones individuales del nombre de la ruta, exactamente como quería en su pregunta. También utiliza los puntos suspensivos unicode que ocupan solo una columna en lugar de tres.
Ejemplo de salida para su ruta (cuando se le da un límite de 30 caracteres):
Vale la pena señalar que esta solución maneja correctamente Unicode en los nombres de directorio mediante el uso
wcswidth
.${#PWD}
, que otras respuestas han utilizado, juzgarán mal el ancho visual de cualquier ruta que contenga caracteres UTF-8.fuente