У меня есть собственный цвет PS1, где у меня есть фактические команды оболочки в отдельном цвете, просто чтобы я мог быстро увидеть, какие команды я набрал, и отделить его от самого вывода команды.
Предположим, что цвет для PS1 установлен на «синий» для командной строки и цвет по умолчанию в моей оболочке - белый.
- Я набираю команду, например, ls, (ls -l окрашен в синий цвет)
- Вывод, который он генерирует, первая строка все еще синяя
- Вся оставшаяся строка становится белой
То, что я хочу, это чтобы весь вывод после команды был «белым».
Другой пример:
- Я набираю команду "кошка", цвет синий
- Выход приходит, весь вывод синий
Я хотел бы, чтобы вывод был «белым» при сохранении командной строки, которую я набрал «синим»
В некоторых командах это нормально, в других командах тот же цвет перетекает в первую строку вывода, а затем включается цвет по умолчанию и некоторые другие команды, весь вывод (например, cat) имеет тот же цвет.
Есть ли способ сохранить только те команды, которые я набрал, одним цветом, а остальные по умолчанию?
Я на OSX.
РЕДАКТИРОВАТЬ # 1
Вот скриншот, на который @ derobert ссылается в комментариях, который показывает, что я ищу.
Ответы:
По сути, вы хотите сбросить цвет терминала прямо перед тем, как bash выполнит команду. Это можно сделать с помощью
trap
.Например:
Bash выполняет
DEBUG
ловушку непосредственно перед командой, поэтому это приведет кtput sgr0
(что сбрасывает атрибуты форматирования), выполняемому перед каждой командой.Это
[[ -t 1 ]]
проверка безопасности, чтобы убедиться, что STDOUT на самом деле является терминалом. В некоторых случаях STDOUT bash не подключен к терминалу (трубопровод, удаленный ssh и т. Д.), И поэтому вы не хотитеtput
отправлять управляющие коды терминала.источник
.bashrc
(или там, где$PS1
установлено). Я бы поставил это рядом с$PS1
определением, чтобы вы знали, что они связаны.