Що робить update_terminal_cwd в терміналі OS X


21

Мене це спантеличує досить довгий час. У $PROMPT_COMMANDbash в OS X є команда під назвою update_terminal_cwd. Я впевнений, що це не вбудований баш і, швидше за все, існує лише в OS X. Але я не знаю, що саме це робить. Хтось знає?

Відповіді:


26

Він оновлює підказку, щоб відлучити Поточний робочий каталог (CWD), і визначається у /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"
}

Можливо, варто відзначити, що функція визначена лише у тому випадку, якщо ви використовуєте оболонку в додатку Apple Terminal. Якщо ви використовуєте iTerm, він не буде визначений.
nwinkler

Для чого, до біса, втеча-7 і де вона друкується? Де це задокументовано? :)
Wildcard

1
@Wildcard Це xtermконтрольний код для встановлення тексту рядка заголовка. Найдоступніша документація - це, мабуть, як підказки Linux Bash . У xtermджерелах є реальна документація , IIRC.
tripleee

2
Ця функція встановлена ​​у рядку 9 /etc/bashrc_Apple_Terminal(знайдено за допомогою трюку, вивченого тут ). Але я вважаю, що всередині екранного сеансу $ PROMPT_COMMAND стає порожнім рядком, а значить, /etc/bashrc_Apple_Terminalвін більше не виконується. Ти знаєш чому?
zyxue

1
@zyxue, якщо ви подивитеся /etc/bashrc, вона використовує змінну $TERM_PROGRAMдля визначення терміналу та запуску відповідного, /etc/bashrc_$TERM_PROGRAMякщо він існує. Отже, на екрані сеансу, $TERM_PROGRAMймовірно, не встановлено або встановлено щось інше, ніж Apple_Terminal.
Девід Молес

-15

Непрозорий секретний рядок закодованого формату, '\ e] 7;% s \ a'. Підозрюваний.

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

З того, що я збираю, "файл: // $ HOSTNAME" маскується, щоб ви не могли бачити віддалений протокол: шпигунство хоста.


1
... або $ HOSTNAME - це змінна, яка змінюється залежно від системи, в якій працює сценарій. ?!? Параноїда багато? Якщо ви думаєте, що код, перерахований в іншій відповіді, може робити все, крім друку на екрані, ви не знаєте, як працює сценарій баш.
tubedogg

Ви не отримали пам’ятку? - вразливість bash-вразливості "ShellShock" web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271 У будь-якому випадку 1) Невідоме походження в тому, що я не встановив змінну середовища "update_terminal_cwd" 2) Увімкнено Крім того, це функція. Автоматично підозрюється. Масова інфільтрація. Ніхто цього не хоче. Можливо, NIST повідомить про "вразливості" Apple OSX та Firefox / Chrome / Opera браузера?
користувач982671

7
Ви продовжуєте демонструвати, що не маєте поняття, про що говорите. update_terminal_cwdне є змінною середовища, це ім'я функції. Він визначений чітким текстом у, /etc/bashrcа printfфункція не має можливості робити нічого, крім друку відформатованих рядків на екран. Нарешті, посилання vuln, яке ви опублікували, передбачає виконання довільних функцій шляхом додавання тексту до визначення змінної середовища ... що не має нічого спільного з тим, що тут обговорюється. І що wtf мають стосунки до сценаріїв оболонок?
tubedogg

Це не намагається відповісти на поставлене запитання (див. Тут для детального аналізу, щоб обгрунтувати це твердження). Будь ласка, зарезервуйте поле відповідей для відповідей, які відповідають на запитання. Дякую!
DW

1
@tubedogg Так, якщо ви просто зробите це, typeset -fвін покаже всі "визначені користувачем" функції, і ось як це спливе. Якби вони намагалися зробити щось схематичне, вони не зробили б це легко помітним.
Калонь Колоб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.