Co robi update_terminal_cwd w terminalu OS X

21

Zastanawia mnie to od dłuższego czasu. W $PROMPT_COMMANDbashu w OS X znajduje się polecenie o nazwie update_terminal_cwd. Jestem pewien, że nie jest to wbudowane bash i najprawdopodobniej istnieje tylko w OS X. Ale nie wiem, co dokładnie robi. Ktokolwiek wie?

Czong
źródło

Odpowiedzi:

26

Aktualizuje monit o echo bieżącego katalogu roboczego (CWD) i jest zdefiniowany w /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
źródło
Warto zauważyć, że funkcja jest zdefiniowana tylko wtedy, gdy używasz powłoki w aplikacji Apple Terminal. Jeśli używasz iTerm, nie zostanie zdefiniowane.
nwinkler
Po co, u diabła, jest Escape-7 i gdzie drukuje? Gdzie to jest udokumentowane? :)
Wildcard
1
@Wildcard Jest to xtermkod kontrolny do ustawiania tekstu paska tytułu. Najbardziej dostępną dokumentacją jest być może Linux Bash Prompt Howto . W xtermźródłach znajduje się prawdziwa dokumentacja , IIRC.
tripleee
2
Ta funkcja jest ustawiona w wierszu 9 /etc/bashrc_Apple_Terminal(znalezionym przez sztuczkę nauczoną tutaj ). Ale uważam, że w sesji ekranowej $ PROMPT_COMMAND staje się pustym łańcuchem, co oznacza, że /etc/bashrc_Apple_Terminalprawdopodobnie nie jest już wykonywany. Wiesz dlaczego?
zyxue
1
@zyxue, jeśli spojrzysz /etc/bashrc, używa zmiennej, $TERM_PROGRAMaby określić terminal i uruchomić odpowiedni, /etc/bashrc_$TERM_PROGRAMjeśli istnieje. Więc w sesji ekranowej $TERM_PROGRAMprawdopodobnie nie jest ustawiony lub jest ustawiony na coś innego niż Apple_Terminal.
David Moles,
-15

Nieprzezroczysty ciąg formatu zakodowanego tajnego „\ e] 7;% s \ a”. Posądzać.

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

Z tego, co zbieram, „file: // $ HOSTNAME” jest maskowany, więc nie widzisz protokołu zdalnego: szpiegostwo hosta.

użytkownik982671
źródło
1
... lub $ HOSTNAME to zmienna, która zmienia się w zależności od systemu, w którym działa skrypt. ?!? Paranoiczny dużo? Jeśli uważasz, że kod wymieniony w drugiej odpowiedzi może robić cokolwiek innego niż drukowanie na ekranie, nie masz pojęcia, jak działa skrypt bash.
tubedogg
Nie dostałeś notatki? - Luka w zabezpieczeniach bash „ShellShock” web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271 W każdym razie 1) Nieznane pochodzenie, ponieważ nie ustawiłem tej zmiennej środowiskowej „update_terminal_cwd” 2) Włączone na dodatek jest to funkcja. Automatycznie podejrzewam. Masowa infiltracja. Nikt tego nie chce. Może NIST zgłosi „luki” w systemie Apple OSX i przeglądarce Firefox / Chrome / Opera?
user982671,
7
Nadal demonstrujesz, że nie masz pojęcia, o czym mówisz. update_terminal_cwdnie jest zmienną środowiskową, to nazwa funkcji. Jest on zdefiniowany w postaci zwykłego tekstu, /etc/bashrca printffunkcja nie może nic robić poza drukowaniem sformatowanych ciągów na ekranie. Wreszcie, opublikowany przez ciebie link do wulgaryzmów polega na wykonywaniu dowolnych funkcji poprzez dołączanie tekstu do definicji zmiennej środowiskowej ... która nie ma nic wspólnego z niczym, co jest tutaj omawiane. I czy wtf mają do czynienia ze skryptami powłoki?
tubedogg
Nie próbuje to odpowiedzieć na zadane pytanie (zobacz tutaj szczegółową analizę uzasadniającą to stwierdzenie). Proszę zarezerwować pole odpowiedzi na odpowiedzi, które odpowiadają na zadane pytanie. Dziękuję Ci!
DW
1
@ tubedogg haha ​​tak, jeśli to zrobisz typeset -f, pokaże wszystkie funkcje zdefiniowane przez użytkownika i tak to się pojawiło. Gdyby próbowali zrobić coś szkicowego, nie zrobiliby tego łatwo.
Kanion Kolob