68 votos

Establecer el título de la ventana de terminal en el directorio actual

¿Cómo puedo obtener el Terminal.aplicación en OS X para mostrar el directorio actual en su ventana o pestaña título?

Estoy usando el shell bash.

59voto

vaske Puntos 2468

Depende de su caparazón.

Este artículo muestra varios métodos.

Yo personalmente uso zsh que tiene un conveniente precmd() función que se ejecuta antes de cada símbolo.

    precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt

Aunque las otras preguntas de la lista de bash métodos, alias cd. Bash ofrece inherentes al método que las cadenas sólo en el símbolo del sistema.

bash

bash suministros de una variable PROMPT_COMMAND que contiene un comando que se debe ejecutar antes de que el símbolo del sistema. Este ejemplo (insertado en ~/.bashrc) establece el título de "nombre de usuario@nombre de host: el directorio":

 PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

donde \033 es el código de carácter para el ces, y \007 de BEL. Tenga en cuenta que la comilla es importante aquí: las variables son expandidas en...", y no se ha expandido en '...'. Así PROMPT_COMMAND se establece una expandir valor, pero las variables dentro "..." se expanden cuando PROMPT_COMMAND se utiliza.

Sin embargo, PWD produce la ruta completa del directorio. Si queremos usar el '~' taquigrafía necesitamos para incrustar el escape de la cadena en el símbolo del sistema, lo que nos permite tomar ventaja de la petición siguiente expansiones proporcionados por el shell:

\u          expands to $USERNAME
\h          expands to hostname up to first '.'
\w          expands to directory, replacing $HOME with '~'
\[...\]     embeds a sequence of non-printing characters

Por lo tanto, la siguiente se produce un mensaje de "bash$ ", y un xterm título de "nombre de usuario@nombre de host: el directorio" ...

 case $TERM in
     xterm*)
        PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
        ;;
     *)
        PS1="bash\$ "
        ;;
 esac

Nota el uso de [...], que dice bash ignorar la no impresión de caracteres de control a la hora de calcular el ancho de la línea de comandos. De lo contrario, la línea de comandos de edición confundirse, al colocar el cursor.

11voto

Chris Page Puntos 1514

Como de Mac OS X Lion 10.7, Terminal tiene una explícita la secuencia de escape para establecer el directorio de trabajo, que el Terminal muestra el uso de la ventana estándar de "proxy" icono. Esto permite Comando-Clic para ver el camino, " mostrar en el Finder, o arrástrelo como cualquier otra carpeta. Además, el Terminal puede usar esto para crear otra terminal en el mismo directorio, y para restaurar el directorio de trabajo al dejar de fumar/reiniciar el Terminal (cuando Curriculum vitae está habilitado). También permite la restauración de los directorios de los Grupos de ventanas.

Es el mismo Comando del Sistema Operativo (OSC) de la secuencia de escape como para la ventana y los títulos de las pestañas, pero con el primer conjunto de parámetros a 7. El valor debe ser un "archivo:" dirección URL, que permite por ciento de codificación de caracteres especiales para que pueda manejar válidos todos los nombres de rutas de acceso. También debe incluir el nombre de host para que Terminal puede determinar si es un directorio local; Terminal de evitar su uso como el directorio de trabajo actual si es de un host diferente.

En una nota relacionada, la Terminal del mismo modo admite la configuración de los "representados" archivo " el uso de las OSC en la secuencia de escape con un parámetro de 6. Si se establece, el proxy icono se mostrará en lugar del directorio de trabajo. Por ejemplo, yo tengo emacs y menos configurado para reflejar el archivo/búfer en el servidor proxy icono. Esto permite que las tty basado en programas para estar más integrado con el entorno de sistema operativo.

El directorio de trabajo los comportamientos están habilitados de forma predeterminada para bash (el shell por defecto en Mac OS X). Ver /etc/bashrc para el código correspondiente.

Es también, probablemente, vale la pena mencionar que el León de la Terminal de ahora admite la configuración del título de la ficha de forma independiente desde el título de la ventana usando la OSC secuencia de escape.

7voto

binarysmacker Puntos 128

Copiar y pegar en el archivo ~/.perfil:
PROMPT_COMMAND='echo -ne "\033]0; ${PWD##*/}\007"'

Esto definirá el título de la pestaña de terminal para el nombre de la carpeta (NO la ruta completa).
Así que...
Developer/Applications/Utilities/Bluetooth/ se convierte en => Bluetooth

1voto

Michael Norrish Puntos 28

Bash soluciones que involucran a la PS1 y la PROMPT_COMMAND tanto fallar si el directorio tiene los caracteres Unicode en el mismo (al menos en Snow Leopard). La mejor solución que se me ocurrió fue hacer el equivalente de

PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "

Lamentablemente esto no funciona directamente, así que en su lugar he definido una función de shell para hacer la tr llamada:

termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "

Esto funciona bien para latina acentos, que será en Unicode DFN (los acentos desaparecerá, pero la subyacente caracteres latinos).

Desafortunadamente, no por completo para cosas como el Chino.

1voto

Kopz Kyoto Puntos 11

Asumiendo que usted está utilizando el valor predeterminado de MAC Terminal, puede utilizar la siguiente .perfil de puesto "set_prompt" por sí mismo puede enviar a la carpeta root al abrir una nueva pestaña:

set_prompt () {
    BASE_PATH="${PWD##*/}"
    echo -ne "\033]0;$BASE_PATH\007"
}
set_my_tab () {
   update_terminal_cwd
   set_prompt
}

PROMPT_COMMAND=set_my_tab

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: