¿Qué hace update_terminal_cwd en la terminal de OS X?

21

Estoy desconcertado por esto desde hace bastante tiempo. En $PROMPT_COMMANDel bash de OS X, hay un comando llamado update_terminal_cwd. Estoy seguro de que no es un bash integrado, y lo más probable es que solo exista en OS X. Pero no sé qué hace exactamente. ¿Alguien sabe?

Chong
fuente

Respuestas:

26

Actualiza la solicitud para hacer eco del directorio de trabajo actual (CWD) y se define en /etc/bashrc:

update_terminal_cwd() {
    # Identify the directory using a "file:" scheme URL,
    # including the host name to disambiguate local vs.
    # remote connections. Percent-escape spaces.
    local SEARCH=' '
    local REPLACE='%20'
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
    printf '\e]7;%s\a' "$PWD_URL"
}
Paul Gilfedder
fuente
Vale la pena señalar que la función solo se define si está ejecutando su shell en la aplicación Apple Terminal. Si está usando iTerm, no se definirá.
nwinkler
¿Para qué demonios es el escape-7 y dónde se imprime? ¿Dónde está documentado eso? :)
Comodín
1
@Wildcard Es un xtermcódigo de control para establecer el texto de la barra de título. La documentación más accesible es, tal vez, el Linux Bash Prompt Howto . Hay documentación real en las xtermfuentes, IIRC.
tripleee
2
Esta función se establece en la línea 9 de /etc/bashrc_Apple_Terminal(se encuentra a través de un truco aprendido aquí ). Pero encuentro que dentro de una sesión de pantalla, $ PROMPT_COMMAND se convierte en una cadena vacía, lo que significa que /etc/bashrc_Apple_Terminalprobablemente ya no se ejecute. ¿Sabes por qué?
zyxue
1
@zyxue si nos fijamos /etc/bashrc, utiliza la variable $TERM_PROGRAMpara determinar el terminal y ejecutar un correspondiente /etc/bashrc_$TERM_PROGRAMsi existe. Entonces, en la sesión de pantalla, $TERM_PROGRAMprobablemente no esté configurado, o esté configurado en algo diferente Apple_Terminal.
David Moles
-15

Cadena de formato codificado secreto opaco, '\ e] 7;% s \ a'. Sospechar.

local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"

Por lo que deduzco, "file: // $ HOSTNAME" está enmascarado para que no pueda ver el protocolo remoto: espionaje de host.

usuario982671
fuente
1
... o $ HOSTNAME es una variable que cambia según el sistema en el que se ejecuta el script. ?!? Paranoico mucho? Si cree que el código que figura en la otra respuesta puede hacer algo más que imprimir en la pantalla, no tiene idea de cómo funcionan las secuencias de comandos bash.
tubedogg
¿No recibiste el memo? - Vulnerabilidad de bash "ShellShock" web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271 En cualquier caso 1) Origen desconocido en el que no configuré esa variable de entorno 'update_terminal_cwd' 2) On Además de eso, es una función. Automáticamente sospechoso. Infiltración masiva. Nadie quiere eso. ¿Quizás NIST informará sobre las "vulnerabilidades" de Apple OSX y del navegador Firefox / Chrome / Opera?
user982671
77
Continúas demostrando que no tienes idea de lo que estás hablando. update_terminal_cwdno es una variable de entorno, es el nombre de una función. Está definido en texto claro /etc/bashrcy la printffunción no tiene la capacidad de hacer nada excepto imprimir cadenas formateadas en la pantalla. Finalmente, el enlace vuln que publicó implica ejecutar funciones arbitrarias al agregar texto a una definición de variable de entorno ... que no tiene nada que ver con nada de lo que se está discutiendo aquí. ¿Y qué tienen que ver los navegadores con los scripts de shell?
tubedogg
Esto no intenta responder la pregunta que se hizo (ver aquí un análisis detallado para justificar esta afirmación). Reserve el cuadro de respuesta para las respuestas que respondan a la pregunta que se le hizo. ¡Gracias!
DW
1
@tubedogg jaja sí, si solo haces una typeset -f, mostrará todas las funciones "definidas por el usuario" y así surgió. Si intentaran hacer algo incompleto, no lo harían fácilmente visible.
Kolob Canyon