Як я можу зупинити колір оболонки bash PS1, щоб зупинитися наприкінці команди?


12

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

Припустимо, для кольору в PS1 для командного рядка встановлено значення "синій", а колір за замовчуванням у моїй оболонці - білий.

  • Я набираю команду, наприклад ls, (ls -l кольоровий синій)
  • Вихід, який він генерує, перший рядок ще синій
  • Весь залишковий рядок виходить білим кольором

Я хочу, щоб весь результат після команди був "білий".

Ще один приклад:

  • Я набираю команду 'cat', колір - синій
  • Вихід приходить, весь вихід синій

Я хотів би, щоб результат був "білим", зберігаючи командний рядок, я набрав "синій"

У деяких командах це добре, в інших командах той самий колір переливається в перший рядок виводу, а потім починається колір за замовчуванням і деякі інші команди, весь вихід (наприклад, cat) має той самий колір.

Чи є спосіб зберегти лише ті команди, які я набрав одним кольором, а решту - за замовчуванням?

Я на OSX.

РЕДАКТИКА №1

Ось скріншот, на який посилання @ derobert пов’язано у коментарях, де показано, що я шукаю.

                 ss №1


2
Вам потрібно показати нам своє підказку, щоб ми могли точно визначити помилки.
glenn jackman

Відповіді:


14

Ви в основному хочете скинути колір терміналу безпосередньо перед виконанням команди bash. Це можна зробити за допомогою a trap.

Наприклад:

trap '[[ -t 1 ]] && tput sgr0' DEBUG

Bash виконує DEBUGпастку безпосередньо перед командою, тому це призведе до tput sgr0(який скидає атрибути форматування) перед кожною командою.

Це [[ -t 1 ]]перевірка безпеки, щоб переконатися, що STDOUT насправді є терміналом. Можливо, трапляються випадки, коли STHOUT bash не підключений до терміналу (трубопровід, віддалений ssh ​​тощо), і тому ви не хочете tputвідправляти термінальні коди виходу.


Куди ти це поклав? Скажімо, PS1 не повертає колір. Тепер, як ви додаєте цей рядок для виконання цієї команди відразу після того, як користувач поставив свою команду і натиснув клавішу Enter?
полим

1
@polym у вашому .bashrc(або там, де $PS1встановлено). Я ставлю це прямо поруч із $PS1визначенням, щоб ви знали, що вони пов'язані.
Патрік

гаразд вау, що працює. Будь-яка можливість, що це може піти не так?
полим

@polym більше не
Патрік

блискучий, саме це мені потрібно було скинути колір терміналу.
iQ.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.