كيف أجعل نظام ألوان نافذة Apple Terminal يتغير تلقائيًا عندما أقوم بالاتصال بخادم معين

StackOverflow https://stackoverflow.com/questions/157959

  •  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\] $ "

ال الجزء الاول (اللون الأرجواني) هو ما تبحث عنه.

معاينة: enter image description here

هذه هي الألوان المفضلة لدي.يمكنك تخصيص كل جزء من لون المطالبة عن طريق التغيير m رموز (على سبيل المثال. 34m) وهي رموز الألوان ANSI.

قائمة رموز الألوان ANSI:

  • أسود:30 م
  • أحمر:31 م
  • أخضر:32 م
  • أصفر:33 م
  • أزرق:34 م
  • أرجواني:35 م
  • ازرق سماوي:36 م
  • أبيض:37 م
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top