Я использую Ubuntu и могу вручную изменить bash
цвет приглашения оболочки на зеленый, используя
export PS1="\e[0;32m[\u@\h \W]\$ \e[m"
Однако я хочу, чтобы цвет приглашения оболочки автоматически менялся при каждом открытии нового терминала или вкладки. Я знаю, что основной TTY TERM имеет 16 цветов, и это нормально, чтобы повернуть цвета, если открыто более 16 терминалов. Будет ли решение работать при подключении через Putty
, tmux
или screen
.
Моя идея состоит в том, чтобы написать сценарий оболочки и поместить его, в .bashrc
котором будет обнаружена новая терминальная сессия, которую открыл пользователь, и увеличить глобальный счетчик с \e[0;31m[
до \e[0;47m[
. Как определить количество открытых терминалов пользователем?
источник
tty
. Я думаю, что мы / другие слишком сконцентрировались на этом "вопросе" и забыли, что могут быть другие решения для всей "потребности" :) Я бы даже поиграл с реализацией случайного селектора цвета. Если это 256 цветов, выбор одинаковых / похожих цветов не должен произойти много. Однако ручная настройка цветов для заданных номеров очков даст лучшую персонализацию.color="\e[38;5;"$(((RANDOM % 231 )+1))"m"
(только 231, чтобы отклонить оттенки серого), однако многие из этих цветов оказались просто разными оттенками, и некоторые из них темные, поэтому могут быть почти невидимыми, и я думаю, никто не будет использовать это в реальной жизни ...В случае одного пользователя, если мы возьмем пример
xterm
, мы можем просто посчитать количество пидxterm
;xterm
создает отдельный pid для каждого окна.gnome-terminal
однако запускается один pid, но хорошая новость заключается в том, что он создает дочерний процесс для каждого окна и / или вкладки. мы можем получить эти дочерние процессы командой:Однако есть несколько сложностей, с которыми нужно иметь дело:
Читая ваш вопрос, мы можем предположить, что пользователь в этом случае фактически является владельцем x-сессии . Обычно мы можем просто использовать
$USER
-variable, но это может не совпадать с текущим вошедшим пользователем$DISPLAY
.В многопользовательской ситуации pids, принадлежащие (или какому) терминальному приложению, не обязательно принадлежат текущему
$DISPLAY
. Нам нужно разделить только соответствующие pids и child-pids.В Unity (15.10 или ниже), если второй пользователь входит в систему, запускается дополнительный процесс (
gnome-pty-helper
), который выглядит как дочерний процессgnome-terminal
, но у процесса (очевидно) нет окна или вкладки. На Мате , процесс все равно существует.Короче говоря
Для подсчета количества вкладок и / или окон терминального приложения нам необходимо:
$DISPLAY
(x-session)$DISPLAY
gnome-pty-helper
работает ли , чтобы исправить число.Это может быть очень хорошо написано, однако, чтобы надежно найти количество в настоящее время открытых окон и / или вкладок.
Сценарий
В приведенном ниже сценарии целевое терминальное приложение используется в качестве аргумента . Скрипт работает на многих терминалах, на которых я его тестировал. Исключение
Tilda
в этот момент.Пример
gnome-terminal
окнами, один (тот, что на картинке) с тремяgnome-terminal
окнами и дваxterm
окна.Команда:
выходы:
пока
выходы:
Сценарий
Использовать
Скопируйте скрипт в пустой файл, сохраните его как
get_terms.sh
, сделайте его исполняемым и запустите его командой:источник
gnome-pty-helper
работает, даже когда вошел только один пользователь (сразу после перезагрузки) и когда я открываю любое количество терминалов, он запускается вторым, тот же помощник. Ваш новый скрипт, кажется, работает для mate-терминала (не смог вызвать ноль), но с xterm, когда у меня открыт только 1, он показывает0
и начинает показывать хорошее число только после второго и с gnome-терминал он всегда показывает слишком мало (вывод,0
когда открыт только один).awk
Образом:Объяснение:
В приведенной выше команде 1 вкладыш
awk
используется для определения количества терминалов. Внутриawk
программы это просто проверка количества строк, возвращаемых командой who - 1.источник
who | awk 'END{print NR - 1}'
так как вы хотите, чтобы количество строк - 1.Простой способ также может быть просто запустить
System Monitor
(если вы запустили из терминала, вы должны написатьgnome-system-monitor
) и на вкладке «Процессы» упорядочить запущенные процессы по имени, а затем подсчитать количество вхожденийBash
в списке (они будут все вместе, если вы упорядочите по имя, так что это легко сосчитать).Обратите внимание, что вы должны искать,
Bash
а не искать,Gnome Terminal
если вы хотите увидеть количество открытых терминалов пользователем. После открытия ТерминалGnome Terminal
также появится в списке процессов, но останется только один, даже если открыто больше Терминалов. Кнопка «Просмотр»System Monitor
позволяет вам определить, какие процессы видеть, например. Все процессы / Пользовательские процессы / Активные ...источник