سؤال

في وضعي الحالي، ليس من غير المعتاد أن يكون لدي العديد من أجهزة كمبيوتر UNIX وأتصل بها، حيث أن العديد من المستخدمين المختلفين اعتمادا على الموقف، والاجتياز من خلال أدلة مختلفة على الأجهزة التي تفعل الأشياء. أنا استخدم KSH من خلال كل شيء.

كنت مثيرا مع موجه مؤخرا، وتمكنت من إلقاء عليه لتغيير بعض الألوان حسب اسم المستخدم الحالي والخادم الحالي. ومع ذلك، ما أريد أيضا أنه لتغيير الألوان بناء على الدليل الحالي الخاص بي. على سبيل المثال، إذا كنت في الدليل "Foo"، يجب أن تكون موجه أصفر، ولكن إذا كنت في الدليل "Bar"، فسيكون المطالبة أرجانا. في كلتا الحالتين، يجب أن تعتمد الدلائل الفرعية أيضا، لذلك يجب أن يكون فحص فرشاة بسيط كافيا.

ومع ذلك، فإن المشكلة التي هربت فيها، ومع ذلك، فذلك عندما أقوم بتشغيل البرنامج النصي الخاص بي. في البرنامج النصي. المتفرعة، كنت قادرا على الحصول عليها لطباعة دليل عمل بلدي الحالي بشكل صحيح حتى بعد أن تحولت الدلائل.

فعلت بعض googling، والعثور على معلومات ل bash، ولكن يبدو أن KSH تجاهلها إلى حد كبير. نظرا لأنني لا أستطيع معرفة كيفية القيام بذلك بمفردي، يجب أن أحضرها إلى مجتمع STACK Overflow، لإضافته إلى المعرفة المستقبلية. وبالتالي، مع تفسير طفلي المعطف، فإن "النسخة السريعة" لسؤالي هي كما يلي:

في KSH، كيف يمكنني إعداد موجه لعرض دليل العمل الحالي ولون النص بناء على مكان وجود دليل العمل الحالي؟ هل هو ممكن؟

هل كانت مفيدة؟

المحلول 2

كنت قادرا على حفر شبه محلول هنا:

على الرغم من أن سنه لا يزال صعبا.

نصائح أخرى

لماذا لا تستخدم ZSH؟ إنه يعتمد على KSH، وهو أقوى بكثير. في ZSH، يمكنك كتابة وظيفة ChPWD التي يتم استدعاؤها ضمنيا في كل مرة تقوم فيها بتغيير الدليل. في هذه الوظيفة، يمكنك التحقق من الدليل الحالي الخاص بك وتعيين PS1 إلى ما تريد.

بدلا من ذلك (حتى في KSH)، يمكنك إنشاء اسم مستعار لأمر مؤتمر نزع السلاح:

change_my_ps() {
  PS1=...
}
better_cd() {
  builtin cd "$@"
  change_my_ps
}
alias cd=better_cd

شيء من هذا القبيل. لست متأكدا من أنه مناسب، لا أتذكر بناء جملة KSH.

لعرض الدليل الحالي في KSH، ضع هذا في ملفك .Profile الخاص بك: تصدير PS1 = " $ PWD" الذي سيتم تحديثه ديناميكيا عند تغيير الدليل دون mucking حول وظائف.

نظرا لأن أحد أجاب بالفعل على الجزء حول اللون، فأنا هنا كيف أفعل ذلك. لا أستطيع تلوين النص، لذلك قمت أيضا بتضمين لقطة شاشة لمحطة.

يرى صفحة ويكيبيديا على رموز ANSI للهروب للحصول على قائمة كاملة من رموز الألوان و print --man و printf --man للحصول على تفاصيل تسلسل الهروب من الطباعة في KSH.

(لاحظ أن KSH93V، الموجود حاليا في بيتا، سيحتوي على لغة سريعة (على ما أظن) على Bash's، مما يجعل هذا النوع من الأشياء أسهل إلى حد ما، على الرغم من أنني أعتقد أنك ربما لا تزال بحاجة إلى استخدام شيء مثل هذه الوظيفة للقيام به مطالبة مشروطة مثل هذا واحد.)

> cat ~/scripts/prompt    
function prompt
{
    set -eu
    typeset c=
    case $PWD in
        */foo) c=3;; # yellow
        */bar) c=5;; # magenta
    esac
    print "\E[3${c}m$PWD\E[m > "
}
PS1='`prompt`'
> . ~/scripts/prompt
/Users/adavies > cd foo  
/Users/adavies/foo > cd ../bar
/Users/adavies/bar > 

enter image description here

انا استعمل هذا:

function chdir
{
   cd "$@"
   CWDH=${PWD%/*}
   PS1="($_time)$hname:${CWDH##*/}/${PWD##*/} ->"
   export PS1
}
alias cd=chdir
chdir .

تجاهل الوقت والاسماني، ولكن يجب أن تعمل الباقي من أجلك. تغيير الألوان ستكون معتمدة المحطة الطرفية. تحتاج إلى معرفة رموز الهروب لكل لون للمحطة التي ستستخدمها. إذا كنت تعرف أنك تستخدم فقط Xterm، فستكون أسهل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top