Комментарии 33
Есть модуль character, который может менять символ/его цвет в зависимости от результата выполнения последней команды.
И есть модуль custom-commands, который позволяет выводить в prompt результат выполнения произвольных команд.
Как-то поставил себе красную стрелку в начало строки ввода. Через пару суток она стала трёхмерной.
Вообще, за идею что я не до конца эффективно использую верхнюю строчку — спасибо. Хотя, имхо — 4 строки на промпт, это слегка перебор, вот две — в самый раз, ну только если у вас не 20к дисплей размером со стену.
И алыверды — давненько такой годноты не попадалось на хабре, всё какая-то реклама и нытьё, хватало бы кармы — влепил бы вам жирный плюс. Но, т.к. я в основном тут ною какой хабр не торт, примите просто спасибо.
Наверно, это всё потому, что я нуб, всю жизнь проведший на винде с Total Commander)
(GUIшные ФМ не канают, т.к. в 99% случаев в Линукс хожу по ssh)
А так статью прочитал с удовольствием, спасибо.
Очень похоже на powerlevel, только без правильного шрифта, без схлопывания отработанных промптов (чтобы не засорять экран) — и на античном баше.
Авторы powerlevel
еще озаботились красивым пошаговым конфигуратором, который избавляет от необходимости ковыряться в исходниках.
А сам PROMPT формируется так
export PROMPT_DIRTRIM=5
export PS1='\n\[\033[0;90m\][\t \D{%Z}, \D{%d.%m.%Y}] on \[\033[0;31m\]\u\[\033[1;33m\]@\[\033[0;36m\]\H:\n\[\033[0;32m\][\w]\[\033[1;33m\]\$ \[\033[00m\]'
Обратите внимания что git_clr и git_tst сначала записываются массивом
git_clr=(GIT $(git -c color.ui=always status -sb))
git_clr="${git_clr[*]} "
printf ... ${git_clr[*]} ...
Мне кажется Вы сделали сложно, а в третьей из процитированных строк допустили неточность. Там требуется только первый элемент массива, но вы используете весь массив. Вот пример:
$ echo $BASH_VERSION
4.4.12(3)-release
$ x=( $( printf '%s\n' qwe asd ) ) ; x="${x[*]}" ; printf '%s\n' "${x[*]}"
qwe asd asd
Можно было бы чуть проще сделать, например:
git_clr=( $( git -c color.ui=always status -sb ) )
printf ... GIT ${git_clr[*]} ...
И для тестовой строки лучше явно выключить расцветку:
git_tst=(GIT $(git -c color.ui=never status -sb))
git_tst=($(git -c color.ui=never status -sb)) git_tst="GIT ${git_tst[*]} "
git_clr=($(git -c color.ui=always status -sb)) git_clr="GIT ${git_clr[*]} "
Обе переменные формирую одинаково чтобы было красиво) Про color.ui=never хорошее замечание, добавил. Спасибо!
Я сам часто пишу шелловские скрипты разной степени замысловатости и считаю, что при правильном подходе можно писать весьма сложные и надежные скрипты.
Кстати массивы баша имеют одно замечательное свойство — обращение к первому (нулевому) элементу массива и к одноименной переменной без индекса взаимозаменяемы. Уже не помню, вычитал ли где или нашел самостоятельно.
$ x=( 123 456 ) ; echo $x ; echo ${x[0]}
123
123
Все кто работал в консоли какого-нибудь Линукса наверно отмечали удобную особенность отображать текущую папку, имя пользователя, имя сервера и что-то еще в зависимости от дистра в строке приглашения. Мне тоже это всегда нравилось.
Я работал и отмечал, что это удобно, но мне это никогда не нравилось. В тру юниксе должен писаться не полный путь, а только название директории. Для полного пути есть команда pwd
. Наличие полного пути превращает линукс из почти-юникса в почти-дос. Вот единственное вменяемое приглашение: export PROMP='[%n@%m %1~]%# '
. (И да, разумеется это не bash. В идеале bash вообще не должен быть установлен, но в Linux этого довольно сложно достичь.)
Наличие полного пути превращает линукс из почти-юникса в почти-дос.
В почти VAX/VMS. Там не было понятия «дерево каталогов» и «на уровень вверх».
В тру юниксе должен писаться не полный путь, а только название директории. Для полного пути есть команда pwd.
Вот у меня параллельно с полдесятка задач над одним компонентом на трёх его ветках. Соответственно есть >=5 рабочих копий в разных каталогах. И у всех последний компонент пути, очевидно, одинаковый — имя компонента. Как мне отличить, где именно я сейчас работаю? Или тру-юниксоид не может работать в таком стиле, ибо грех великий? ;)
Ну, работа — это работа. Если это настоящая работа за деньги, то там в принципе нет места сопливым рассуждениям о "тру-юниксе" и тому подобному.
А отличить можно много как. Если консоли в иксах, можно сделать, чтобы полный путь в заголовке окна писался. Если консоли — виртуальные неиксовые, можно их логично распределить по номерам. Правда, номер тоже можно забыть… но это уже другая проблема. Если если используется что-то вроде tmux, то там тоже заголовки есть.
Всё так. Но мне проще не надеяться на это и просить полный путь в PS1.
И да, он у меня двухстрочный уже лет 10 как.
Понятия «настоящая работа» и «за деньги» — вообще никак не связаны. У волонтеров в каком-нибудь Красном кресте — работа такая настоящая, что настоящее не придумаешь.
А формочки клепать, или джейсончик перекладывать — хоть и за стотыщмильёнов — настоящей работой даже язык не поворачивается назвать.
тру-юниксоид не может работать в таком стиле, ибо грех великий?
Конечно, не может. Тру сделает git worktree
и будет в PS1
смотреть не на имя папки, а на имя ветки. Как дети, чесслово :)
Но это не отменяет необходимость полного пути.
> Как дети, чесслово :)
Это про вашу оценку собеседника :)
P.S. MacOS/iTerm2
> P.S. MacOS/iTerm2
Да сейчас больше проблема, как отключить терминалам эту функциональность — а то её абьюзить стали.
Красные глаза