كيف أجعل نظام ألوان نافذة Apple Terminal يتغير تلقائيًا عندما أقوم بالاتصال بخادم معين
-
03-07-2019 - |
سؤال
عندما أقوم بالدخول إلى خادم إنتاج عن بعد، أرغب في تغيير نظام الألوان لنافذتي الطرفية إلى شيء ساطع ومخيف، ويفضل أن يكون باللون الأحمر، لتحذيري من أنني أتعامل مع خادم مخيف مباشر.
كيف يمكنني أن أجعله يكتشف تلقائيًا أنني قمت بالتسلل إلى مكان ما، وإذا كان هذا المكان موجودًا في قائمة محددة، فقم بتغيير نظام الألوان؟
أرغب في تحديث مخطط Terminal.app، ولا أعرف كيف سأفعل ذلك في بيئة Linux/unix خالصة
المحلول
ووضع البرنامج النصي التالي في ~/bin/ssh
(ضمان بدا ~/bin/
قبل /usr/bin/
في PATH الخاص بك):
#!/bin/sh
HOSTNAME=`echo $@ | sed s/.*@//`
set_bg () {
osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}
on_exit () {
set_bg "{0, 0, 0, 50000}"
}
trap on_exit EXIT
case $HOSTNAME in
production1|production2|production3) set_bg "{45000, 0, 0, 50000}" ;;
*) set_bg "{0, 45000, 0, 50000}" ;;
esac
/usr/bin/ssh "$@"
والسيناريو أعلاه مقتطفات اسم المضيف من خط "اسم المستخدم @ المضيف" (يفترض عليك تسجيل الدخول إلى المضيفين البعيدين مع "سه المستخدم @ المضيفة").
وبعد ذلك اعتمادا على اسم المضيف إما يحدد خلفية حمراء (للخوادم الإنتاج) أو الخلفية الخضراء (لجميع غيره). ونتيجة لذلك سوف تكون جميع النوافذ سه مع خلفية ملونة.
وأفترض هنا الخلفية الافتراضية سوداء، لذلك السيناريو يعود لون الخلفية إلى الأسود عند خروج من الملقم البعيد (انظر "فخ on_exit").
يرجى، لاحظ ولكن هذا السيناريو لا تتبع سلسلة من تسجيلات سه من مضيف واحد إلى آخر. ونتيجة لذلك فإن الخلفية تكون خضراء في حالة دخولك إلى خادم الاختبار أولا، ثم الدخول في الإنتاج منه.
نصائح أخرى
الميزة الأقل شهرة في Terminal هي أنه يمكنك تعيين اسم ملف تعريف الإعدادات على اسم أمر وسيقوم بتحديد ملف التعريف هذا عند إنشاء محطة طرفية جديدة عبر أي منهما شل > أمر جديد... أو شل > اتصال بعيد جديد....
على سبيل المثال، قم بتكرار ملف التعريف الافتراضي الخاص بك، وقم بتسميته "ssh" واضبط لون خلفيته على اللون الأحمر.ثم استخدام أمر جديد… يهرب ssh host.example.com
.
كما أنه يتطابق أيضًا مع الوسائط، لذا يمكنك جعله يختار إعدادات مختلفة لمضيفين بعيدين مختلفين، على سبيل المثال.
إليك حلًا مدمجًا يعتمد على اثنين من الإجابات الموجودة التي تتعامل مع الخروج.يتضمن أيضًا القليل من الإضافات إذا كنت لا ترغب في التعامل مع قيم الألوان 16 بت.
يجب أن يتم وضع هذا في الخاص بك ~/.bash_profile
# Convert 8 bit r,g,b,a (0-255) to 16 bit r,g,b,a (0-65535)
# to set terminal background.
# r, g, b, a values default to 255
set_bg () {
r=${1:-255}
g=${2:-255}
b=${3:-255}
a=${4:-255}
r=$(($r * 256 + $r))
g=$(($g * 256 + $g))
b=$(($b * 256 + $b))
a=$(($a * 256 + $a))
osascript -e "tell application \"Terminal\" to set background color of window 1 to {$r, $g, $b, $a}"
}
# Set terminal background based on hex rgba values
# r,g,b,a default to FF
set_bg_from_hex() {
r=${1:-FF}
g=${2:-FF}
b=${3:-FF}
a=${4:-FF}
set_bg $((16#$r)) $((16#$g)) $((16#$b)) $((16#$s))
}
# Wrapping ssh command with extra functionality
ssh() {
# If prod server of interest, change bg color
if ...some check for server list
then
set_bg_from_hex 6A 05 0C
end
# Call original ssh command
if command ssh "$@"
then
# on exit change back to your default
set_bg_from_hex 24 34 52
fi
}
- set_bg - يأخذ 4 قيم ألوان (8 بت).
- set_bg_from_hex - يأخذ 4 قيم سداسية عشرية.معظم مراجع الألوان التي أستخدمها هي بالصيغة السداسية، وهذا يجعل الأمر أسهل بالنسبة لي.يمكن اتخاذ خطوة أبعد لتحليل #RRGGBB فعليًا بدلاً من RR GG BB، ولكنه يعمل جيدًا بالنسبة لي.
- ssh - تغليف أمر ssh الافتراضي بأي منطق مخصص تريده.يتم استخدام عبارة if للتعامل مع الخروج لإعادة تعيين لون الخلفية.
والجمع بين الإجابات 1 و <لأ href = "https://superuser.com/a/209920/195425" > 2 وما يلي:
إنشاء ملف ~/bin/ssh
كما هو موضح في 1 مع المحتوى التالي:
#!/bin/sh
# https://stackoverflow.com/a/39489571/1024794
log(){
echo "$*" >> /tmp/ssh.log
}
HOSTNAME=`echo $@ | sed s/.*@//`
log HOSTNAME=$HOSTNAME
# to avoid changing color for commands like `ssh user@host "some bash script"`
# and to avoid changing color for `git push` command:
if [ $# -gt 3 ] || [[ "$HOSTNAME" = *"git-receive-pack"* ]]; then
/usr/bin/ssh "$@"
exit $?
fi
set_bg () {
if [ "$1" != "Basic" ]; then
trap on_exit EXIT;
fi
osascript ~/Dropbox/macCommands/StyleTerm.scpt "$1"
}
on_exit () {
set_bg Basic
}
case $HOSTNAME in
"178.222.333.44 -p 2222") set_bg "Homebrew" ;;
"178.222.333.44 -p 22") set_bg "Ocean" ;;
"192.168.214.111") set_bg "Novel" ;;
*) set_bg "Grass" ;;
esac
/usr/bin/ssh "$@"
وجعله قابل للتنفيذ: chmod +x ~/bin/ssh
و~/Dropbox/macCommands/StyleTerm.scpt
الملف يحتوي على المحتوى التالي:
#https://superuser.com/a/209920/195425
on run argv
tell application "Terminal" to set current settings of selected tab of front window to first settings set whose name is (item 1 of argv)
end run
الكلمات Basic, Homebrew, Ocean, Novel, Grass
هي من ماك إعدادات نظام التشغيل محطة كمد ، :
ويمكنك تعيين المتغير $ PS1 في .bashrc الخاص بك.
red='\e[0;31m'
PS1="$\[${red}\]"
وتحرير: للقيام بذلك فتح محطة. ثم يقول
#touch .bashrc
ويمكنك بعد ذلك فتح .bashrc في برنامج TextEdit أو في تيكست رانجلر و إضافة الأوامر السابقة.
وهناك حل آخر هو لضبط الألوان المضيق في ملف سه التكوين:
وداخل ~ / .ssh / التكوين
Host Server1
HostName x.x.x.x
User ubuntu
IdentityFile ~/Desktop/keys/1.pem
PermitLocalCommand yes
LocalCommand osascript -e "tell application \"Terminal\" to set background color of window 1 to {27655, 0, 0, -16373}"
Host Server2
HostName x.x.x.x
User ubuntu
IdentityFile ~/Desktop/keys/2.pem
PermitLocalCommand yes
LocalCommand osascript -e "tell application \"Terminal\" to set background color of window 1 to {37655, 0, 0, -16373}"
تحتوي محطات Unix المتوافقة مع Xterm على تسلسلات هروب قياسية لتعيين ألوان الخلفية والمقدمة.لست متأكدًا مما إذا كان تطبيق Terminal.app يشاركهم أم لا؛أنه ينبغي.
case $HOSTNAME in
live1|live2|live3) echo -e '\e]11;1\a' ;;
testing1|testing2) echo -e '\e]11;2\a' ;;
esac
الرقم الثاني يحدد اللون المطلوب.0=افتراضي، 1=أحمر، 2=أخضر، إلخ.لذلك، عند وضع هذا المقتطف في ملف .bashrc مشترك، سيمنحك خلفية حمراء على الخوادم المباشرة وخلفية خضراء على الخوادم التجريبية.يجب عليك أيضًا إضافة شيء مثل هذا لإعادة تعيين الخلفية عند تسجيل الخروج.
on_exit () {
echo -e '\e]11;0\a'
}
trap on_exit EXIT
يحرر:لقد توصلت جوجل إلى طريقة ل اضبط لون الخلفية باستخدام AppleScript.من الواضح أن هذا يعمل فقط عند تشغيله على نفس الجهاز مثل Terminal.app.يمكنك حل ذلك باستخدام وظيفتين مجمّعتين:
set_bg_color () {
# color values are in '{R, G, B, A}' format, all 16-bit unsigned integers (0-65535)
osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}
sshl () {
set_bg_color "{45000, 0, 0, 50000}"
ssh "$@"
set_bg_color "{0, 0, 0, 50000}"
}
يجب أن تتذكر تشغيل sshl بدلاً من ssh عند الاتصال بخادم مباشر.هناك خيار آخر وهو كتابة دالة مجمعة لـ ssh تقوم بفحص وسيطاتها بحثًا عن أسماء المضيفين المباشرة المعروفة وتعيين الخلفية وفقًا لذلك.
لماذا لا تقوم فقط بتغيير موجه الصدفة كلما قمت بتسجيل الدخول عبر SSH؟عادة ما تكون هناك متغيرات شل محددة: SSH_CLIENT, SSH_CONNECTION, SSH_TTY
قم بتعيين الألوان الطرفية في الخادم /.bashrc
كنت بحاجة إلى نفس الشيء، شيء يجعلني أدرك أنني كنت على خادم مرحلي أو خادم إنتاج وليس في بيئة التطوير الخاصة بي، وهو الأمر الذي قد يكون من الصعب جدًا تحديده، خاصة عندما أكون في وحدة تحكم Ruby أو شيء من هذا القبيل.
ولتحقيق ذلك، استخدمت setterm
الأمر في الخادم الخاص بي ~./bashrc
ملف لعكس ألوان الجهاز عند الاتصال واستعادة الألوان عند الخروج.
~/.bashrc
# Inverts console colours so that we know that we are in a remote server.
# This is very important to avoid running commands on the server by accident.
setterm --inversescreen on
# This ensures we restore the console colours after exiting.
function restore_screen_colours {
setterm --inversescreen off
}
trap restore_screen_colours EXIT
ثم أضع هذا في جميع الخوادم ~/.bashrc
الملفات حتى أعرف متى تكون المحطة الطرفية الخاصة بي موجودة على خادم بعيد أم لا.
ميزة أخرى هي أن أيًا من فريق التطوير أو فريق التطوير لديك يستفيد من هذا دون جعله جزءًا من عملية الإعداد.
يعمل بشكل رائع.
يجب عليك تغيير لون اسم المستخدم واسم الجهاز المضيف.
أضف السطر التالي إلى ملفك ~/.bash_profile
ملف:
export PS1=" \[\033[34m\]\u@\h \[\033[33m\]\w\[\033[31m\]\[\033[00m\] $ "
ال الجزء الاول (اللون الأرجواني) هو ما تبحث عنه.
هذه هي الألوان المفضلة لدي.يمكنك تخصيص كل جزء من لون المطالبة عن طريق التغيير m
رموز (على سبيل المثال. 34m
) وهي رموز الألوان ANSI.
قائمة رموز الألوان ANSI:
- أسود:30 م
- أحمر:31 م
- أخضر:32 م
- أصفر:33 م
- أزرق:34 م
- أرجواني:35 م
- ازرق سماوي:36 م
- أبيض:37 م