LINUX.ORG.RU
ФорумTalks

Удобный bash prompt


0

1

Сегодня написал для себя новый двухстрочный bash-prompt. Возможности:

  • Определение терминал это или консоль.
  • Отображение времени, когда было закончено выполнение команды.
  • Отображение загрузки процессора на момент выполнения команды.
  • Отображение имени пользователя и хоста (если это root, то меняется цвет на красный).
  • Если команда была закончена с ошибкой, то отображается код ошибки в круглых скобочках.
  • Отображение текущего пути. Если путь превышает указанную длину (я остановился на цифре 25), то начало пути обрезается и заменяется на троеточие.
  • До конца строки отображается разделитель (зависит от ширины терминала).
  • На следующей строке отображается информация о GIT (если текущая директория находится внутри репозитория) и приглашение для ввода команды.

Скриншот: http://www.ugolnik.info/wp-content/uploads/2010/09/bash-prompt.png

Код берем тут: http://www.ugolnik.info/?p=1469

Предложения по улучшению кода приветствуются.

★★★★★

if [ "$CURENT_PATH" = "$HOME" ]; then
  CURENT_PATH="~"
fi

- не очень хорошо, что каталог, содержащийся в ~ будет выведен с полным путем -> избыточность

в zsh использую print с опцией -D:

$ print -D $PWD
~
$ print -D $PWD/tmp
~/tmp

может в bash есть что-то похожее, ну или использовать тот же sed (но, вероятно будет медленнее)

Ja-Ja-Hey-Ho ★★★★
()
Ответ на: комментарий от Ja-Ja-Hey-Ho

> - не очень хорошо, что каталог, содержащийся в ~ будет выведен с полным путем -> избыточность

Да, про эту проблему знаю, но не придумал как ее лучше решить. Она отмечена у меня в списке.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от andreyu

вот кусок моего старого .bashrc делающий тоже самое, кривовато наверно, но вроде работало:

echo $PWD | grep "^$HOME" >/dev/null 2>&1
if [ $? -eq 0 ]; then
  local CURRDIR=`echo $PWD | awk -F$HOME '{print $2}'`
  newPWD="~$CURRDIR"
elif [ "$PWD" = "$HOME" ]; then
  newPWD="~"
else
  newPWD="$PWD"
fi
Ja-Ja-Hey-Ho ★★★★
()
Ответ на: комментарий от andreyu

Заметил одну багу. Если запустить MC и зайти в какую-либо директорию внутри $HOME, нажать ctrl+o, то путь будет отображаться как «~». Хотя команда pwd отображает корректный путь.

andreyu ★★★★★
() автор топика

> До конца строки отображается разделитель (зависит от ширины терминала).

Вот это точно не нужно.

И еще один вопрос: как с пожираем CPU? Батарею ноута за полчаса использования убьет?

Igron ★★★★★
()
Ответ на: комментарий от Igron

> > До конца строки отображается разделитель (зависит от ширины терминала).

Вот это точно не нужно.


Вы как то категорично заявляете об этом. Если вам не нужно, то отключите. Для меня это оказалось удобным.

И еще один вопрос: как с пожираем CPU? Батарею ноута за полчаса использования убьет?


За счет чего?

andreyu ★★★★★
() автор топика

* Загрузка процессора не нужна.
* Скобки и троеточие - лишние символы, на них можно сэкономить.
* Двухстрочный промпт не нужен.

Всё остальное у меня и так уже есть.

Biga
()
Ответ на: комментарий от GotF

Спасибо. Ваш вариант (судил по скриншоту) тоже весьма неплох.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от Biga

> * Загрузка процессора не нужна.

Не используйте, я же не настаиваю ;)
Но для меня это имеет смысл - знаю, как был загружен процессор на момент выполнения команды. Всегда могу увидеть историю.

* Скобки и троеточие - лишние символы, на них можно сэкономить.


И как понять, что это обрезок пути, а не полный путь?

* Двухстрочный промпт не нужен.


Я не настаиваю, но мне именно такой вариант показался удобнее.

Всё остальное у меня и так уже есть.


Вы хвастаетесь? ;)

andreyu ★★★★★
() автор топика

Вот ещё кое-какие замечания...

>> uptime | awk '{min=NF-2; print $min}'

Не лучше читать из /proc ?

cut -d' ' -f1 /proc/loadavg

В обрезке длинного пути используется жёстко заданное число. Возможно, стоит учитывать ширину терминала (tput cols).

GotF ★★★★★
()
Ответ на: Вот ещё кое-какие замечания... от GotF

> Не лучше читать из /proc ?

Да, вероятно это будет шустрее на одну команду. Спасибо.

В обрезке длинного пути используется жёстко заданное число. Возможно, стоит учитывать ширину терминала (tput cols).


Угу, вчера себе пометил этот пункт. Но реализовать лень, т.к. у меня в Ion3 фреймы не бывают слишком маленькими.

andreyu ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.