Was macht update_terminal_cwd im Terminal von OS X?

21

Ich bin jetzt schon eine ganze Weile verwirrt. In $PROMPT_COMMANDder Bash in OS X gibt es einen Befehl namens update_terminal_cwd. Ich bin mir sicher, dass es sich nicht um eine eingebaute Bash handelt und höchstwahrscheinlich nur in OS X existiert. Weiß das jemand?

Chong
quelle

Antworten:

26

Es aktualisiert die Eingabeaufforderung zum Echo des aktuellen Arbeitsverzeichnisses (Current Working Directory, CWD) und ist definiert 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"
}
Paul Gilfedder
quelle
Es kann erwähnenswert sein, dass die Funktion nur definiert ist, wenn Sie Ihre Shell in der Apple Terminal-App ausführen. Wenn Sie iTerm verwenden, wird es nicht definiert.
Nwinkler
Wofür zum Teufel ist die Escape-7 und wohin druckt sie? Wo ist das dokumentiert? :)
Wildcard
1
@Wildcard Dies ist ein xtermSteuercode zum Festlegen des Titelleisten-Texts. Die am besten zugängliche Dokumentation ist vielleicht das Linux Bash Prompt Howto . Es gibt echte Dokumentation in den xtermQuellen, IIRC.
Tripleee
2
Diese Funktion wird in Zeile 9 von eingestellt /etc/bashrc_Apple_Terminal(gefunden über einen hier erlernten Trick ). Aber ich finde, dass $ PROMPT_COMMAND in einer Bildschirmsitzung eine leere Zeichenfolge wird, was bedeutet, dass /etc/bashrc_Apple_Terminales wahrscheinlich nicht mehr ausgeführt wird. Weißt du, warum?
Zyxue
1
Wenn Sie sich @zyxue ansehen /etc/bashrc, verwendet es die Variable $TERM_PROGRAM, um das Terminal zu bestimmen und ein entsprechendes auszuführen, /etc/bashrc_$TERM_PROGRAMwenn es existiert. In der Bildschirmsitzung ist es also $TERM_PROGRAMwahrscheinlich nicht festgelegt oder auf etwas anderes als festgelegt Apple_Terminal.
David Moles
-15

Undurchsichtige, geheim codierte Formatzeichenfolge '\ e] 7;% s \ a'. Vermuten.

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

Soweit ich erfahre, ist "file: // $ HOSTNAME" ausgeblendet, sodass Sie das Remote-Protokoll "Host-Spionage" nicht sehen können.

user982671
quelle
1
... oder $ HOSTNAME ist eine Variable, die sich abhängig vom System ändert, auf dem das Skript ausgeführt wird. ?!? Paranoid viel? Wenn Sie der Meinung sind, dass der in der anderen Antwort aufgeführte Code etwas anderes als das Drucken auf dem Bildschirm bewirken kann, wissen Sie nicht, wie Bash-Scripting funktioniert.
Tubedogg
Hast du das Memo nicht bekommen? - "ShellShock" bash Schwachstelle web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271 Auf jeden Fall 1) Unbekannter Ursprung, da ich diese Umgebungsvariable 'update_terminal_cwd' nicht gesetzt habe 2) Ein obendrein ist es eine Funktion. Automatisch vermuten. Masseninfiltration. Niemand will das. Vielleicht wird NIST Apple OSX und Browser Firefox / Chrome / Opera "Schwachstellen" melden?
User982671
7
Sie demonstrieren weiterhin, dass Sie keine Ahnung haben, wovon Sie sprechen. update_terminal_cwdist keine Umgebungsvariable, sondern der Name einer Funktion. Es ist in Klartext definiert /etc/bashrcund die printfFunktion kann nur Zeichenfolgen im Druckformat auf dem Bildschirm anzeigen. Schließlich beinhaltet der von Ihnen gepostete Vuln-Link das Ausführen beliebiger Funktionen durch Anhängen von Text an eine Umgebungsvariablendefinition ... was nichts mit dem zu tun hat, was hier diskutiert wird. Und was haben Browser mit Shell-Skripten zu tun?
Tubedogg
Damit wird nicht versucht, die gestellte Frage zu beantworten (siehe hier für eine detaillierte Analyse, um diese Aussage zu rechtfertigen). Bitte reservieren Sie das Antwortfeld für Antworten auf die gestellte Frage. Vielen Dank!
DW
1
@tubedogg haha ​​yeah, wenn du nur einen machst typeset -f, werden alle "benutzerdefinierten" Funktionen angezeigt und so tauchte dies auf. Wenn sie versuchten, etwas Skizziertes zu tun, würden sie dies nicht leicht sichtbar machen.
Kolob Canyon