Как заменить заголовок терминала с использованием SED в строке PS1 Prompt

Я был в этом для> 1 часа. и не могу понять это. Вот мой PS1 Строка подсказки:

$ echo $PS1
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;this is the title\a\]

Название окна терминала является Это заголовок . \ [\ E] 2; отмечает начало заголовка, а \ A \] отмечает конец. См. «Настройка заголовка окна терминала» .

Согласно https://regex101.com/ , строка Regex \\\ [\\ E \] 2;. * \\ a \\\] соответствовать названию и его побегу. Смотрите демонстрацию этого здесь: https://regex101.com/r/okcx0t/1 .

Следовательно, команда SED должна удалить заголовок из строки PS1 и распечатать вывод, но, похоже, не совпадает со строкой заголовка! Как видно из ECHO $ ​​PS1 , нет никакой разницы:

$ echo $PS1 | sed -E "s|\\\[\\e\]2;.*\\a\\\]||"
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;this is the title\a\]

$ echo $PS1
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;this is the title\a\]

Как я могу заменить эту строку заголовка в PS1 переменную, с или без SED ?

Мой SED Command Command Command работает для простых совпадений. Смотри! Это название явно удаляется с конца PS1 строки PS1 .

$ echo $PS1 | sed 's|this is the title||'
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;\a\]

Я просто не могу соответствовать началу строки титула, и заканчивая побег, это все!

Ссылки, которые я искал, пытаясь решить эту

  1. https://wiki.archlinux.org/index.php/bash/prompt_customization#customize_the_terminal_window_title
  2. https://linuxize.com/post/ow -Вто-проверка - IF-String-String-icon-in-in-bash /
  3. https://stackoverflow.com/questions/229551/how-to-Check-if-a-string-contains- In-bash
  4. https://superuser.com/questions/1107680/how-to-use-sed-with-piping
  5. https://stackoverflow.com/questions/8356958/sed-just- Для удаления-а-подстроки
  6. https://unix.stackexchange.com/questions/169207/remove-backslashes-from-a-text-file/169210#169210 - имеет некоторые важные комментарии относительно Выход в Bash, ' против « и т. Д.
  7. https://unix.stackexchange.com/questions/19491/ov-to-sspecify-Characters-using-HexcaDecimal -код-in-grep
  8. https://ru.wikipedia.org/wiki/ascii
0
задан 24 January 2021 в 22:45

1 ответ

Ваша проблема заключается в том, что двойные кавычки позволяют оболочку заменить \\ на \ - вы можете увидеть это, если вы запустите команду С опцией Shell's -x -x :

$ set -x

$ echo foo | sed -E "s|\\\[\\e\]2;.*\\a\\\]||"
+ echo foo
+ sed -E 's|\\[\e\]2;.*\a\\]||'
foo

Он должен работать, если вы изменены на одиночные цитаты вокруг выражения Sed Sed. Флаг -E не требуется бывшего. Дано

$ printf '%s\n'  "$ps1"
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;this is the title\a\]

тогда

$ set -x

$ printf '%s\n' "$ps1" | sed 's|\\\[\\e\]2;.*\\a\\\]||'
+ sed 's|\\\[\\e\]2;.*\\a\\\]||'
+ printf '%s\n' '\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;this is the title\a\]'
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
1
ответ дан 18 March 2021 в 23:40

Другие вопросы по тегам:

Похожие вопросы: