Взагалі отримати нинішні кольори неможливо. Обробка контрольної послідовності терміналу відбувається "всередині" терміналу, де б це не було. З термінальним емулятором, таким як xterm
той, що вбудований у ядро операційної системи, що забезпечує віртуальні термінали ядра, внутрішній стан емулятора, включаючи його поняття про поточну "графічну передачу" (тобто колір та атрибути), знаходиться на машині сама по собі і є теоретично доступною. Але для справжнього терміналу ця інформація знаходиться в деяких місцях оперативної пам’яті на фізично окремій машині, підключеній через послідовне посилання.
Однак, деякі термінали включають механізм зчитування такої інформації як частини термінального протоколу, що надсилається через це послідовне посилання. Вони надають керуючі послідовності, які програма може надсилати до терміналу, які змушують її надсилати інформацію про свій внутрішній стан, як вхід терміналу. mikeserv
показав вам контрольні послідовності, на які відповідає xterm
емулятор терміналу. Але це специфічно для xterm
. Наприклад, вбудовані емулятори терміналів у ядрі Linux та різних ядрах BSD є, наприклад, різними типами терміналів і взагалі не реалізують таких послідовностей управління. Те саме стосується цілих сімей справжніх терміналів.
Термінали DEC VT525 реалізують механізм зчитування, але мають набір керуючих послідовностей, які не стосуються тих, які використовуються xterm
. Один надсилає послідовність DECRQSS (Запит вибору або налаштування) для запиту поточної графічної передачі, а термінал відповідає, надсилаючи DECRPSS (Вибір звіту або Установка). Конкретно:
- Хост надсилає: DCS
$
q
m
ST (DECRQSS з частиною функції управління SGR як налаштування)
- Термінал відповідає: DCS
0
$
r
0
;
3
3
;
4
4
m
ST (DECRPSS з параметрами та функцією керування частиною контрольної послідовності SGR, яка встановлює поточний колір переднього плану та фону)
Звичайно, уважне прочитання вашого питання виявляє, що ви знову махаєте бананом, покритим шоколадом, у тих європейських валютних системах. Те, що ви насправді намагаєтесь зробити, для чого ви вибрали рішення, а потім запитали, як зробити частину цього рішення, - це зберегти попередній стан, поки ви пишете деякий кольоровий вихід. Мається на увазі не лише послідовність керування DEC VT для цього, а для нього є послідовність терміналів консолі SCO, яка розпізнається xterm
та різними вбудованими емуляторами терміналу ядра, та запис termcap / terminfo, який повідомляє, що вони стосуються для вашого терміналу.
Записи termcap є sc
і rc
. Записи terminfo є save_cursor
і restore_cursor
. Назви дещо вводять в оману (хоча вони і виступають як попередження, що ви покладаєтесь на щось, що де-факто, а не де-юре ). Фактичні послідовності керування DECSC, DECRC, SCOSC та SCORC зберігають та відновлюють також поточну графічну передачу.
З огляду на те, що стаття, на яку ви вказували, стосується генерування послідовностей керування зі скриптів оболонки, команда, яку ви зараз шукаєте, - це tput
.
Подальше читання
echotc Co
абоechoti colors
, але там просто не змінна , яка зберігає поточний колір визначення коду.