Что делает update_terminal_cwd в терминале OS X


21

Я озадачен этим довольно давно. В $PROMPT_COMMANDbash в OS X есть команда с именем update_terminal_cwd. Я уверен, что это не встроенный bash, и, скорее всего, существует только в 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 Prompt Howto . В источниках есть реальная документация 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}"

Из того, что я собираю, "file: // $ HOSTNAME" замаскирован, поэтому вы не можете видеть удаленный протокол: шпионаж хоста.


1
... или $ HOSTNAME - это переменная, которая изменяется в зависимости от системы, в которой выполняется скрипт. ?!? Параноик много? Если вы считаете, что код, указанный в другом ответе, может выполнять что-либо, кроме печати на экране, вы не представляете, как работает сценарий bash.
— 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?
— user982671

7
Вы продолжаете демонстрировать, что понятия не имеете, о чем говорите. update_terminal_cwdэто не переменная окружения, это имя функции. Он определен в виде обычного текста, /etc/bashrcи printfфункция не может ничего делать, кроме печати отформатированных строк на экране. Наконец, ссылка на vuln, которую вы разместили, включает в себя выполнение произвольных функций путем добавления текста к определению переменной среды ... который не имеет ничего общего с тем, что обсуждается здесь. И как браузеры имеют отношение к сценариям оболочки?
— tubedogg

Это не пытается ответить на вопрос, который был задан (см. Здесь для подробного анализа, чтобы оправдать это утверждение). Пожалуйста, зарезервируйте поле для ответов, которые отвечают на заданный вопрос. Спасибо!
— DW

1
@tubedogg хаха, да, если вы просто сделаете a, typeset -fон покажет все «пользовательские» функции, и вот как это появилось. Если бы они пытались сделать что-то отрывочное, они бы не сделали это легко заметным.
— Колоб Каньон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.