العناصر الديناميكية في باش PS1
سؤال
لقد وضعت ما يلي في ملف ~/.localsh لتخصيص موجه Bash عند العمل مع GIT.
في الأساس أريد أن أعرض الفرع الحالي في محطة بلدي. تُظهر أداة GITK الفروع ذات الخلفية الخضراء والمقدمة السوداء ، لذلك هذا ما أحاول القيام به.
ما لديّ يعمل ، لكن عندما أضغط على السهم لأعلى على لوحة المفاتيح للتمرير مرة أخرى من خلال الأوامر السابقة ، يتم الكتابة فوقها.
لقد حدث هذه الأشياء من قبل عندما لا تنهي تسلسل لون مع [ e [0m]. الآن يحدث لي بسبب استدعاء وظيفة getGitBranch. أعتقد أن الأمر يتعلق بالمحطة التي لا تعرف المدة التي تستغرقها المطالبة.
لذا ، فإن Heres السؤال ... كيف يمكنني استخدام العناصر الديناميكية بشكل صحيح في مطالبة Bash الخاصة بي وعدم الحصول عليها عندما أستخدم الأسهم Up؟
function getgitbranch()
{
git branch | grep "^\*" | cut -c3-
}
function blabla()
{
PS1=""
PS1="$PS1\[\e[0;30m\]\[\e[42m\]\[\$(getgitbranch)\]\[\e[0;49m\]\[\e[0m\] "
PS1="$PS1\[\e[1;35m\][\[\e[0m\]"
PS1="$PS1\[\e[1;33m\]\w\[\e[0m\]"
PS1="$PS1\[\e[1;35m\]]\[\e[0m\]"
PS1="$PS1 \[\e[1;31m\]>\[\e[0m\] "
export PS1
}
المحلول
مسح ال \[\]
من جميع أنحاء $(getgitbranch)
. تحتل الأحرف التي تخرجها هذه الوظيفة مساحة بالفعل على الشاشة ، لذا فأنت تريد أن تفسر Bash لهم. استخدام \[\]
يقول لا عد الشخصيات التي تظهر في الداخل.