¿Cómo acorto la ruta actual del directorio que se muestra en la terminal?

17

Si estoy en un directorio profundo, digamos:

~/Desktop/Dropbox/School/2017/C/A3/

entonces cuando abro la terminal, dice

bob@bob-ubuntu:~/Desktop/Dropbox/School/2017/C/A3/$

y luego escribo mi comando. Eso es muy largo, y cada línea que escribo en el terminal va a la siguiente línea. Quiero saber si hay una manera para que solo muestre mi directorio actual. Quiero que muestre:

bob@bob-ubuntu: A3/$

De esta manera está muy claro, y siempre puedo hacer pwdpara ver mi directorio completo. Simplemente no quiero que todo el directorio sea visible en la terminal porque ocupa demasiado espacio.

K Split X
fuente

Respuestas:

12

Necesita modificar PS1en su archivo de inicio de shell (probablemente .bashrc).

Si ya está allí, su configuración contendrá \w, que es lo que le da a su directorio de trabajo. Cambie eso a \W(mayúsculas). Cierre sesión y vuelva a iniciarla, o haga:

. .bashrc

(o cualquiera que sea su archivo).

Si no está allí, agregue algo como:

PS1='\u@\h: \W:\$'

a .bashrco lo que sea. Busque PS1en la bashpágina del manual para obtener más ideas.

Ten cuidado; bashpuede usar varios más de un archivo de inicialización, por ejemplo, .bashrcy .bash_profile; puede ser que PS1esté configurado en todo el sistema. Pero puede anular eso en uno de sus propios archivos.

Bob ansioso
fuente
23

Desde bash 4, la forma directa de acortar la profundidad del directorio en la línea de comandos es usar el siguiente comando en su archivo bashrc. Solo recuerde volver a abrir su terminal y también el número (es decir, 1) especifica la profundidad del directorio a mostrar.

PROMPT_DIRTRIM = 1

Esmaeil MIRZAEE
fuente
44
Esto es exactamente lo que estaba buscando. Establecer algo como export PROMPT_DIRTRIM=3en tu .bashrces el punto medio perfecto entre \Wy \w. Ver: gnu.org/software/bash/manual/html_node/Bash-Variables.html
spkane
3

Suponiendo que está usando bash, cambie la cadena de solicitud (variable PS1) para que tenga en \Wlugar de \w.

por ejemplo, si tu PS1 está actualmente \u@\h:\w\$, configúrala en\u@\h:\W\$

Para hacer esto permanente, tendrá que cambiarlo en los archivos de inicio de bash, por ejemplo, ~/.bash_profileo ~/.bashrc.

vea man bashy busque PROMPTINGdetalles completos y una lista de caracteres especiales con barra invertida.

cas
fuente
Tengo 4 menciones de PS1 ¿Cambio las 4?
K Split X
4 menciona dónde? en ~ / .bash_profile? no debería hacer daño cambiar todas las instancias de \wPS1 a \W. o simplemente puede configurar el indicador en lo que desee en la parte inferior del script.
cas
1

en este caso tendrás que editar PS1 ,

En cambio \w, tendrá un comando o una variable que muestra la ruta acortada:

PS1 original

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$'

cámbielo a

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]${PWD##*/}\[\033[00m\]\$'

Tenga en cuenta que esto pondrá el nombre de usuario en lugar de ~ si está en su directorio de inicio.

para evitar que necesite algunos comandos en lugar de $ {PWD ## * /} ej.

if [[ "${PWD}" == "${HOME}" ]] ; then printf \~; else echo -n ${PWD##*/}; fi

la nueva PS1 se verá así

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]`if [[ "${PWD}" == "${HOME}" ]] ; then printf \~; else echo -n ${PWD##*/}; fi`\[\033[00m\]\$'

Mientras intentaba salvar el mundo, no tenía ninguna idea olvidada .

Jonás
fuente
1

Esto es portátil para todos los shproyectiles.

Asigne a PS1uno de sus archivos de inicio de shell:

PS1='${PWD##*/} $ '

El aviso se verá así

dir $

¿Dónde direstá el nombre base del directorio actual?

La $PWDvariable contiene la ruta del directorio actual y ${PWD##*/}eliminará todo hasta el último /en esa ruta.

Las comillas simples evitan que el formulario de shell evalúe la sustitución de variables en el momento de la asignación (el valor de $PS1se evaluará cada vez que se muestre la solicitud).

La PS1variable no debe exportarse ya que solo la utiliza el shell actual.

Kusalananda
fuente