Cosa fa update_terminal_cwd nel terminale di OS X.


21

Ne sono perplesso da un po 'di tempo. In $PROMPT_COMMANDof the bash in OS X, c'è un comando chiamato update_terminal_cwd. Sono sicuro che non è un bash integrato e molto probabilmente esiste solo in OS X. Ma non so esattamente cosa faccia. Qualcuno lo sa?

Risposte:


26

Aggiorna la richiesta di eco alla Directory di lavoro corrente (CWD) ed è definita in /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"
}

Vale la pena notare che la funzione è definita solo se si esegue la shell nell'app Apple Terminal. Se stai usando iTerm, non sarà definito.
nwinkler,

A cosa serve l'escape-7 e dove stampa? Dov'è documentato? :)
Wildcard il

1
@Wildcard È un xtermcodice di controllo per impostare il testo della barra del titolo. La documentazione più accessibile è forse il Linux Bash Prompt Howto . Esiste una vera documentazione nelle xtermfonti, IIRC.
Tripleee

2
Questa funzione è impostata nella riga 9 di /etc/bashrc_Apple_Terminal(trovata tramite un trucco appreso qui ). Ma trovo che all'interno di una sessione dello schermo, $ PROMPT_COMMAND diventa una stringa vuota, il che significa che /etc/bashrc_Apple_Terminalprobabilmente non viene più eseguito. Sai perché?
Zyxue,

1
@zyxue se lo guardi /etc/bashrc, usa la variabile $TERM_PROGRAMper determinare il terminale ed eseguire un corrispondente /etc/bashrc_$TERM_PROGRAMse esiste. Quindi nella sessione dello schermo, $TERM_PROGRAMprobabilmente non è impostato o è impostato su qualcosa di diverso Apple_Terminal.
David Moles,

-15

Stringa di formato codificata segreta opaca, '\ e] 7;% s \ a'. Sospettare.

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

Da quello che ho raccolto, "file: // $ HOSTNAME" è mascherato, quindi non puoi vedere il protocollo remoto: lo spionaggio dell'host.


1
... o $ HOSTNAME è una variabile che cambia a seconda del sistema su cui è in esecuzione lo script. ?!? Paranoico molto? Se pensi che il codice elencato nell'altra risposta possa fare qualcosa di diverso dalla stampa sullo schermo, non hai idea di come funziona lo script bash.
tubedogg,

Non hai ricevuto il promemoria? - "ShellShock" bash vulnerabilità web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271 In ogni caso 1) Origine sconosciuta in quanto non ho impostato la variabile di ambiente 'update_terminal_cwd' 2) On soprattutto, è una funzione. Sospetto automaticamente. Infiltrazioni di massa. Nessuno lo vuole. Forse NIST segnalerà "vulnerabilità" di Apple OSX e del browser Firefox / Chrome / Opera?
user982671

7
Continui a dimostrare di non avere idea di cosa stai parlando. update_terminal_cwdnon è una variabile d'ambiente, è il nome di una funzione. È definito in chiaro /etc/bashrce la printffunzione non ha la possibilità di fare nulla tranne stampare stringhe formattate sullo schermo. Infine, il collegamento volgare che hai pubblicato comporta l'esecuzione di funzioni arbitrarie aggiungendo del testo a una definizione di variabile d'ambiente ... che non ha nulla a che fare con tutto ciò che viene discusso qui. E i browser hanno a che fare con gli script di shell?
tubedogg,

Questo non tenta di rispondere alla domanda che è stata posta (vedere qui per un'analisi dettagliata per giustificare questa affermazione). Si prega di prenotare la casella di risposta per le risposte che rispondono alla domanda che è stata posta. Grazie!
DW,

1
@tubedogg haha ​​sì, se lo fai typeset -fti mostrerà tutte le funzioni "definite dall'utente" ed è così che è spuntato. Se stessero provando a fare qualcosa di abbozzato, non lo renderebbero facilmente visibile.
Kolob Canyon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.