2

В настоящее время я использую псевдоним в csh/tcsh для открытия оболочек с определенными цветами окон.
Пример: xterm -geometry 105x25 -font 8x13 -bc -bg #333 -fg #999 \!* &

Я хотел бы, чтобы одна команда открыла новую оболочку с цветом в зависимости от уровня оболочки в дереве.

Пример:

  1. %> xt
    Открытая оболочка А (белая БГ / черная ФГ) - новая оболочка
  2. %> xt
    Открытая оболочка Aa (черная бг / серая фг) - дочерняя оболочка
  3. %> xt
    Открытая оболочка Aaa (зеленый BG / желтый FG) - оболочка внука

У меня есть bash, но по умолчанию я использую tcsh или csh.
Как уже говорилось, я хотел бы, чтобы одна команда / псевдоним открывала родительские и дочерние оболочки и решала, какой цвет использовать.

2 ответа2

3

Большинство оболочек (tcsh, bash, zsh, но не csh) увеличивают переменную среды SHLVL при запуске, так что $SHLVL указывает уровень вложенности вашей текущей оболочки. Так что делай что-то вроде (для tcsh)

set xt_bg_colors=(white white black green)
set xt_fg_colors=(black black gray yellow)
alias xt "xterm -geometry 105x25 -font 8x13 -bc -bg $xt_bg_colors[$SHLVL] -fg $xt_fg_colors[$SHLVL] \!* &"
2

Я бы создал переменную-массив со списком спецификаций цвета (или двумя массивами - один для fg и один для bg). Затем в своем псевдониме выберите из этого массива переменную индекса, а затем увеличьте ее.

Демо-версия:

> set array=(apple banana cherry)
> @ index = 1
> @ index = ( ( $index ) % ${#array} + 1 ) ; echo $array[$index]

Каждый раз, когда вы выполняете последнюю строку (которая представляет ваш псевдоним), текущий элемент в массиве отображается, индекс увеличивается, а затем индекс оборачивается, если он превышает длину массива.

Возможно, вам придется использовать файл для отслеживания индекса вместо переменной в памяти.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .