/ / Спеціальна функція оболонки риби для виведення кольорового тексту - Linux, оболонка, термінал, риба, термінал-емулятор

Спеціальна функція для рибної оболонки для розфарбовування тексту - Linux, оболонка, термінал, риба, термінал-емулятор

При використанні рибної оболонки в терміналі-емуляторі(наприклад, термінатор) разом з командою, яка видає багато тексту, це може бути корисно для отримання кольорового кодування на виході. Я знаю, що сценарій може додати інформацію про колірного коду до виводу типу "grep --color = автоЯ думаю, що можна змінити рибний термінал, щоб просканувати вихід і додати це в спеціальних місцях?

Що я хочу зробити, це те, що текст "помилка"з'являється у висновку з будь-якого сценарію завжди позначається червоним кольором, а "попередження" завжди позначено жовтим кольором. Хтось знає, чи можливо це за допомогою введення файлів функцій у ~ / .config / fish / функцій реж. чи подібне?

Відповіді:

3 для відповіді № 1

Це в основному порушення шару. Зазвичай вихід зовнішніх команд не повертається через оболонку. Він прямує до терміналу.

Крім того, все, що ви робите тут, може потенційно сповільнити вихід. (І через випуск риби №1396, це може бути досить екстремально).

Однак, це можливо, якщо ви завжди підходите до такої функції

function colorstuff
while read -l input
switch $input
case "*error*"
set_color red
echo $input
case "*warning*"
set_color yellow
echo $input
case "*"
set_color normal
echo $input
end
end
set_color normal
end

Використовуйте його як somecommand | colorstuff. (А може і додати ^&1 якщо ви також бажаєте мати більш жорсткі кольори)

У моїх тестах це спричиняє помітне уповільнення, і навіть із виправленою проблемою воно все ще буде повільніше, оскільки воно має відповідати кожному рядку.

Дійсно, справжнє рішення для будь-якого інструменту, який ви використовуєте для фарбування самого себе, оскільки він знає, який вихід засоби. Все, що можна зробити - це шукати ключові слова.


0 для відповіді № 2

Для загальних потреб у колоризації випуску я додав grc плагін до Спорядження саме для цієї мети.