Якщо ваш sshd не надає корисних змінних, ви можете використовувати його
ps -p $PPID
або якийсь інший випадковий PS-трюк (якщо ваша оболонка не встановлений $PPID
), щоб побачити, чи є батьківський процес оболонки ваш процес віддаленого входу чи ні. Тоді, якщо перемикач "батько-це-віддалений-річ" $ PS1. А потім завантажте OpenSSH та використовуйте пропозиції geekosaur / Caleb, оскільки ваш ssh-сервер є непотрібним. ;)
Або ви можете скористатися результатом "хто я є", захопити останнє поле (тобто $( who am i | awk '$0=$NF')
) і перевірити, чи хост є віддаленим або локальним, щоб вирішити, чи входили ви локально чи віддалено.
Або ви можете увімкнути вихід, $(hostname)
щоб ваша оболонка використовувала відповідний $ PS1 для конкретних хостів.
Або давайте по-справжньому зіпсуватися. Якщо ви використовуєте сучасні оболонки, такі як bash, ksh93 або zsh, ви можете скористатися тим, що $ PS1 переоцінюється при виконанні. Отже, ви можете включити вкладений умовний блок, щоб робити шалені речі з git, якщо ваш cwd знаходиться в сховищі, а ще щось поза. Наприклад, тут я ввожу своє швидке зміна залежно від каталогу, в якому я в [[ conditional ]] && $( echo "whatever it should be if true) || $( echo "whatever should be the if-not-true prompt" )
основному використовую.
default prompt$ PS1='$(id -un) @ $(hostname)$( [[ $(pwd) = /tmp ]] && echo " [I am in /tmp]" || echo " /not/in/tmp")$ '
myname @ host /not/in/tmp$ cd /tmp
myname @ host [I am in /tmp]$ cd /etc
myname @ host /not/in/tmp$
Звичайно, визначення $ PS1 буде виглядати божевільним у вашому профілі, але ви отримаєте супер-барвисті-git-речі лише тоді, коли ви фактично знаходитесь у сховищі git, тоді як ви маєте звичайні кольори в іншому місці. :) Зауважте, що навколо призначення PS1 ви повинні використовувати одинарні лапки. Ви не хочете, щоб змінні розширювалися при призначенні PS1; ви хочете, щоб вони розширилися, коли пізніше буде оцінено $ PS1. Отже, одноцитати.