Есть ли способ сделать динамическое приглашение bash, чтобы при входе на сервер оно меняло цвет?
Поэтому я хочу, чтобы подобный цвет был зеленым в моей системе и менялся на красный при подключении к серверам. У меня огромное количество серверов, на которые я не хочу ставить разные .bashrc
.
Ответы:
Удаленная подсказка устанавливается пультом
~/.bashrc
. Так что вам все равно нужно скопировать его на удаленный сервер. Однако вы можете использовать один~/.bashrc
для всех хостов и установить цвет приглашения на основе имени хоста:Примечания:
Не устанавливайте,
PS1
если он еще не установлен (например, если оболочка не является интерактивной). ПроверкаPS1
непустого состояния - очень распространенный способ определить, является ли оболочка интерактивной, и вам не следует путать программы, которые это делают. (Возможно, более точный тест проверяет,$-
содержит ли онi
.)Если вы хотите, чтобы этот код запускался при входе на удаленный сервер, у вас всегда должен быть один из файлов профиля
~/.bashrc
. Но я полагаю, вы это знаете.В
PS1
, коды выхода должны быть включены в\[...\]
.\[033[m
сбрасывает передний план и фон по умолчанию. Так что, здесь,:\w
в терминале переднего плана / фона.\[033[48;5;XXXm\033[38;5;YYYm
устанавливает фон / передний план наXXX
/YYY
.Для сценария, который выводит доступные цвета, попробуйте
colortest
.Чтобы проверить, как будет выглядеть приглашение:
источник
Если вы не хотите (не можете) отделить пульты
PS1
, то я бы сказал «нет», это было бы по крайней мере ужасно сложно. Учтите, что в SSH-соединении локальная сторона не имеет реального представления о том, что представляет собой приглашение оболочки, а что-то еще, и поэтому настройка цветов для приглашения действительно должна исходить из удаленного узла. Вы можете установить цвета до начала сеанса, но они будут эффективны для всех выходных данных, то есть до тех пор, покаls
редактор или редактор не установит свои собственные цвета.Конечно, вы можете придумать какую-нибудь оболочку для сеанса, чтобы обнаружить все, похожее на приглашение, и раскрасить его, но это легко может привести к ложным срабатываниям (цвет на каждой строке с
$
?) И будет ужасно сложным по сравнению с простым отбрасыванием одна строка на ваш.profile
или.bashrc
на каждой машине.При наличии нескольких компьютеров в любом случае было бы полезно искать решения для синхронизации изменений конфигурации на всех из них. Будь то какой-то инструмент, созданный для этого, или просто скрипт, или просто запуск цикла для копирования (набора) конфигурационных файлов на них все.
источник
Я использую скрипт-оболочку с sshpass, который сначала загрузит временный профиль, а затем ssh, используя этот профиль (и удалит временный файл).
Вот две основные вещи сценария:
scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"
Используя это, вы можете легко определить цвета удаленных сессий.
Я знаю, что это не дает прямого ответа на ваш вопрос, но его можно использовать для его решения.
источник
sshpass -p
если это вообще возможно! Аргументы командной строки для запуска программ обычно видны всем пользователямps
, и таким же будет пароль. Даже если на вашем компьютере нет других учетных записей, вы можете случайно распечатать его на экране.sshpass
может прочитать пароль из переменной среды, которая не слишком сложна в использовании. Кроме того, рассмотрите ключи ssh, если вы все равно хотите сохранить учетные данные для входа в файл.Возможно, вас заинтересует то
context-color
, что я собрал именно для этой цели: https://github.com/ramnes/context-colorЭто простой скрипт, который при выполнении выводит цвет на основе хеша вывода команды. Установив его где-нибудь в вашем
$PATH
, вы можете сделать что-то вроде этого в вашем.bashrc
:(где
--prompt/-p
находится переключатель, позволяющий экранировать цвет для подсказок, а\[\e[0m\]
также escape-последовательность для сброса цвета)По умолчанию команда, используемая для генерации хэша, имеет вид
whoami; hostname
. Если вы просто хотите, чтобы цвет менялся в соответствии с именем хоста, вы можете изменить$CONTEXT
переменную environment (export CONTEXT="hostname"
) или просто использовать--context/-c
опцию (context-color -c "hostname"
).Смотрите ниже пример:
источник