Изменить цвет PS1 при подключении к другому хосту через SSH

Можно управлять масштабом это bc выводы с scale=<#> аргумент.

$ echo "scale=10; 5.1234 * 5.5678" | bc
28.52606652

$ echo "scale=5; 5.1234 * 5.5678" | bc
28.52606

Используя Ваш пример:

$ bc <<< 'scale=2; 1.5 * 1.5'
2.25

Можно также использовать -l переключатель (благодаря @manatwork), который инициализирует масштаб к 20 вместо значения по умолчанию 0. Например:

$ bc -l <<< '1.5 * 1.5'
2.25

$ bc -l <<< '1.52 * 1.52'
2.3104

Можно читать больше о scale в bc страница справочника.

5
21.07.2015, 03:08
2 ответа

Составьте спецификацию приглашения по частям, или используйте промежуточные переменные, или их комбинацию. SSH устанавливает переменную SSH_CLIENT , которая указывает, откуда вы вошли в систему. Затем вы можете использовать имя хоста, чтобы определить, где вы вошли.

if [[ -n $SSH_CLIENT ]]; then
  case $HOSTNAME in
    *.example.com) prompt_user_host_color='1;35';; # magenta on example.com
    *) prompt_user_host_color='1;33';; # yellow elsewhere
  esac
else
  unset prompt_user_host_color # omitted on the local machine
fi
if [[ -n $prompt_user_host_color ]]; then
  PS1='\[\e['$prompt_user_host_color'm\]\u@\h'
else
  PS1=
fi
PS1+='\[\e[1;34m\] \w\[\e[1;31m\]$(__git_ps1)\[\e[1;0;37m\] \$\[\e[0m\] '
9
27.01.2020, 20:34

Как и другой, но вы могли бы также использовать отдельный rc-файл для ssh.

<<\SSH_RC \
    tee -a ~/.ssh/rc
case $HOSTNAME in
    (host1) sshclr=1;;
    (host2) sshclr=3;;
esac

... и где бы вы ни назначали свои $PS1 ...

PS1="\[\e[1;$((32+ssh_clr))"'...

... вы можете оставить его в одинарных кавычках...

PS1='\[\e[$((!$?|4));$((32+sshclr))...'

... что должно подчеркивать, если последняя выполненная команда выходила с ненулевым кодом выхода. Вот картинка...

enter image description here

Я добавил туда расширение ${SSH_CLIENT+ssh:}, чтобы четко обозначить @ssh: при таком подключении....

2
27.01.2020, 20:34

Теги

Похожие вопросы