Respuestas:
Depende de tu caparazón.
Este artículo muestra varios métodos.
Personalmente uso zsh que tiene una conveniente función precmd () que se ejecuta antes de cada solicitud.
precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt
Aunque las otras preguntas enumeran los métodos bash, alias cd. Bash proporciona un método inherente que encadena solo la solicitud.
golpetazo
bash proporciona una variable PROMPT_COMMAND que contiene un comando para ejecutar antes de la solicitud. Este ejemplo (insertado en ~ / .bashrc) establece el título en "username @ hostname: directorio":
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
donde \ 033 es el código de caracteres para ESC y \ 007 para BEL. Tenga en cuenta que la cita es importante aquí: las variables se expanden en "..." y no se expanden en '...'. Entonces PROMPT_COMMAND se establece en un valor no expandido, pero las variables dentro de "..." se expanden cuando se usa PROMPT_COMMAND.
Sin embargo, PWD produce la ruta completa del directorio. Si queremos usar la abreviatura '~', necesitamos incrustar la cadena de escape en el indicador, lo que nos permite aprovechar las siguientes expansiones de indicador proporcionadas 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, lo siguiente produce un mensaje de "bash $", y un título xterm de "username @ hostname: directorio" ...
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
Tenga en cuenta el uso de [...], que le dice a bash que ignore los caracteres de control que no se imprimen al calcular el ancho de la solicitud. De lo contrario, los comandos de edición de línea se confunden al colocar el cursor.
~/.profile
archivo (o equivalente) en la máquina remota.
Copie y pegue en el archivo ~ / .profile:
PROMPT_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $PROMPT_COMMAND"
Esto establecerá el título de la pestaña del terminal actual al nombre de la carpeta en la que se encuentra (NO a la ruta completa).
Entonces ... se
Developer/Applications/Utilities/Bluetooth/
convierte en =>Bluetooth
A partir de Mac OS X Lion 10.7, Terminal tiene una secuencia de escape explícita para configurar el directorio de trabajo, que Terminal muestra usando el ícono "proxy" de la ventana estándar. Esto le permite hacer Comando y hacer clic en él para ver la ruta, revelar en Finder o arrastrarlo como cualquier otra carpeta. Además, Terminal puede usar esto para crear otra terminal en el mismo directorio y restaurar el directorio de trabajo al salir / reiniciar Terminal (cuando Reanudar está habilitado). También permite restaurar directorios para grupos de ventanas.
Es la misma secuencia de escape del Comando del sistema operativo (OSC) que para los títulos de ventanas y pestañas, pero con el primer parámetro establecido en 7. El valor debe ser una URL "file:", que permite caracteres especiales de codificación porcentual para que pueda manejar Todos los nombres de ruta válidos. También debe incluir el nombre de host para que Terminal pueda determinar si se trata de un directorio local; Terminal evitará usarlo como el directorio de trabajo actual si es de un host diferente.
En una nota relacionada, Terminal de manera similar admite la configuración del "archivo representado" utilizando la secuencia de escape OSC con un parámetro de 6. Si está configurado, el icono del proxy mostrará esto en lugar del directorio de trabajo. Por ejemplo, tengo emacs y menos configurados para reflejar el archivo / búfer que se muestra actualmente en el icono del proxy. Esto permite que estos programas basados en tty se integren más con el sistema operativo circundante.
Los comportamientos del directorio de trabajo están habilitados de forma predeterminada para bash (el shell predeterminado en Mac OS X). Ver / etc / bashrc para el código relevante.
Probablemente también valga la pena mencionar que Lion Terminal ahora admite configurar el título de la pestaña independientemente del título de la ventana utilizando la secuencia de escape OSC.
update_terminal_cwd
función establecerá el icono de proxy en el directorio de trabajo actual. Por defecto $PROMPT_COMMAND
es update_terminal_cwd
.
Además de recomendarle que use la secuencia de escape del Comando del Sistema Operativo específico de Apple Terminal: ESC ] Ps ; Pt BEL
where Ps
is 7
and Pt
is a file:
URL; Vale la pena agregar que en Mac OS X 10.11 (y probablemente desde 10.7) hay un archivo /etc/bashrc_Apple_Terminal
(no editable bajo 10.11) que define lo conveniente update_terminal_cwd()
como (sin los comentarios):
update_terminal_cwd ()
{
local url_path='';
{
local i ch hexch LC_CTYPE=C LC_ALL=;
for ((i = 0; i < ${#PWD}; ++i))
do
ch="${PWD:i:1}";
if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
url_path+="$ch";
else
printf -v hexch "%02X" "'$ch";
url_path+="%${hexch: -2:2}";
fi;
done
};
printf '\e]7;%s\a' "file://$HOSTNAME$url_path"
}
También puede usar esto en sus cajas remotas, en caso de que esté pensando en hacerlo y luego rascarse la cabeza para codificar correctamente la URL del archivo en bash.
Y si cambias PROMPT_COMMAND
por tu cuenta .bash_profile
o .bashrc
puedes olvidarte de llamar a esto. En el mismo archivo muestran un ejemplo de encadenamiento un poco mejor con:
PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
Personalmente en mi .bash_profile
quería agregar el indicador git, así que hice esto:
local git_path=/Applications/Xcode.app/Contents/Developer/usr/share/git-core
for f in $git_path/git-completion.bash $git_path/git-prompt.sh
do
if [[ -f "$f" ]]; then
. "$f"
fi
done
get_sha() {
git rev-parse --short HEAD 2>/dev/null
}
if [ "function" = $(type -t __git_ps1) ]; then
export GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWCOLORHINTS=1
GIT_PS1_DESCRIBE_STYLE="branch"
GIT_PS1_SHOWUPSTREAM="auto git"
export PROMPT_COMMAND="$PROMPT_COMMAND${PROMPT_COMMAND:+; }"'__git_ps1 "\[\e[0;32m\]\u\[\e[1;32m\]@\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]" "\$ " "\n{%s $(get_sha)}"'
fi
Las soluciones Bash que involucran PS1 y PROMPT_COMMAND fallan si el directorio tiene caracteres Unicode (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\]\$ "
Desafortunadamente, esto no funciona directamente, por lo que definí 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 los acentos latinos, que estarán en Unicode NFD (los acentos desaparecerán pero el carácter latino subyacente permanecerá).
Desafortunadamente, fallará por completo para cosas como el chino.
Suponiendo que está utilizando el Terminal MAC predeterminado, puede usar el siguiente en .profile ya que "set_prompt" por sí solo puede enviarlo a la carpeta raíz cuando abre 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
Ingrese esto en su ~ / .profile o archivo equivalente:
function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }
export PS1='\W \$ '
settitle `pwd`
La primera línea contiene dos caracteres especiales que no se pueden copiar / pegar, pero puede descargar el texto desde aquí: http://blog.nottoobadsoftware.com/files/setterminaltitle.sh .
echo
uso printf
, que le permite expresar esos caracteres (ESC y BEL / Control-G) con secuencias de escape:printf '\e]0;$@\a"