Это походит на плохую вставку копии в сценарий профиля оболочки.
Как @slm обозначенный,' ^[
+ [
'обычная escape-последовательность, но Вы говорите, что имеете'^[
+ [
+ [
'. Когда я просматриваю управляющие коды своего эмулятора терминала, я не вижу кодов, которые являются ESC, сопровождаемым 2 скобками.
Так как ESC является непечатаемым символом, он часто представлен в текстовых редакторах как ^[
. Я предполагаю, что кто-то редактировал сценарий профиля, который имел этот управляющий код и пытался скопировать/вставить он на другую систему. Но они скопировали визуальное представление ESC (^[
) вместо самого ESC.
Однако это привело бы только к наблюдению ^[[D
, нет ^[[[D
. Для этого, возможно, скопировать/вставить был сделан путем ввода его вместо этого, и это - опечатка.
В любом случае, для фиксации этого необходимо будет найти сценарий профиля, который имеет это, и зафиксируйте его. При использовании удара попробуйте следующее:
fgrep -r '[[[' /etc/bashrc /etc/bashrc.d /etc/bash_profile /etc/profile /etc/profile.d ~/.profile ~/.bashrc ~/.bash_profile
После того как Вы нашли его, легко зафиксировать. В vi
редактор, просто удалите ^[[
символы и в режиме вставки делают Ctrl + v затем ESC. Это вставит литеральный символ ESC.
echo
- это настройка терминального устройства (дисциплинарная часть в драйвере ядра tty), termcap - это управление терминалом (реальным или эмулятором) с помощью экранирующих последовательностей, это две отдельные вещи.
Здесь вы хотите, чтобы приложение не выполняло определенную ioctl
. Одним из способов может быть отсоединение от терминала.
socat - exec:okular,pty,raw
Будет выполняться okular
, прикрепленный к другому псевдотерминальному устройству, и socat
будет передавать данные из вашего терминала к этому устройству.
Для передачи произвольных аргументов, с помощью zsh
, bash
или ksh93
:
okular() {
CODE=$(printf '%q ' exec okular "$@"
) socat - 'system:"eval \"$CODE\"",pty,raw'
}