Thursday, September 10, 2009

bash prompt с человеческим лицом

Давненько я не твикал свой bash prompt. Вот недавно увидел прикольную фичу.
Часто в приглашении выводится значение, которое вернула последняя команда. Можно пойти дальше, и вместо числа выводить ":)" при успешном завершении и ":(" при неуспешном. (Более экспрессивный вариант: ^_^ и O_O). Для этого в PS1 можно вставить такую функцию:


function smiley () {
local status=$?
if [ $status -eq 0 ]; then
echo ':)'
else
echo ":( $status"
fi
}
Пример PS1 (вместо $COLOR* надо подставить последовательности для нужного цвета):


PS1="$COLOR1$(smiley) u@h $COLOR2w $ $JOBS_COLOR$(printJobs)$NO_COLOR"
Выглядит это примерно так:

:) doer@coyote /usr/home/doer $ (j:3)

Можно смайлики выводить разными цветами, наподобие этого:


PS1="`if [ $? = 0 ]; then echo [e[33m]^_^[e[0m]; else echo [e[31m]O_O[e[0m]; fi` u@h $COLOR2w $ $JOBS_COLOR$(printJobs)$NO_COLOR"

Улучшения/предложения приветствуются.

3 comments:

  1. 1) баш под бсд нитру :)
    2) полный путь в промпте - ацкий ацтой, если у тебя не 22" вайдскрин; особливо доставляет, когда шаришся где-нить в дебрях юзерских сайтов (ну или бинда в чруте)

    ReplyDelete
  2. 1) Дефолтовый csh тоже особо не радует. Например очень своеобразно в prompt-е показывается кол-во задач.
    2) PROMPT_DIRTRIM=8

    ReplyDelete
  3. ты просил рекомендации по улучшению, я их дал, глядя со своей колокольни :)
    дефолтовый сишелл вообще запредельно убог. чего стоит хотя бы отсутствие поддержки изкоробки home/end/del.

    ReplyDelete