Как стать автором
Обновить

Комментарии 33

А вы не пробовали starship? Кажется, он реализует всё описанное здесь + много больше.

Не пробовал, красные глаза умеет?

Есть модуль character, который может менять символ/его цвет в зависимости от результата выполнения последней команды.
И есть модуль custom-commands, который позволяет выводить в prompt результат выполнения произвольных команд.

Прикольно, я и не настаиваю что моя поделка лучше всех. Это какбэ туториал про то, как сделать самому а не как установить программу)

Как-то поставил себе красную стрелку в начало строки ввода. Через пару суток она стала трёхмерной.


Вообще, за идею что я не до конца эффективно использую верхнюю строчку — спасибо. Хотя, имхо — 4 строки на промпт, это слегка перебор, вот две — в самый раз, ну только если у вас не 20к дисплей размером со стену.


И алыверды — давненько такой годноты не попадалось на хабре, всё какая-то реклама и нытьё, хватало бы кармы — влепил бы вам жирный плюс. Но, т.к. я в основном тут ною какой хабр не торт, примите просто спасибо.

Спасибо за спасибо)
Настраиваешь разные цвета в PS1, несколько строк… А потом запускаешь mc, тыц-тыц, Ctrl+O, а там непотребство какое-то :(
Наверно, это всё потому, что я нуб, всю жизнь проведший на винде с Total Commander)
(GUIшные ФМ не канают, т.к. в 99% случаев в Линукс хожу по ssh)

Неповерю что explorer.exe неумеет в sshfs, что из коробки пока не умеет — допускаю, но уже 100% кто-то сделал адекватный плагин.

За что Вы так со словом «length»? Ни разу оно не написано правильно.
А так статью прочитал с удовольствием, спасибо.
Очепятка, поправлю, спасибо.

Очень похоже на powerlevel, только без правильного шрифта, без схлопывания отработанных промптов (чтобы не засорять экран) — и на античном баше.


 ~/Proyectos/Elixir/ex_pain    master !3 ?1


Авторы powerlevel еще озаботились красивым пошаговым конфигуратором, который избавляет от необходимости ковыряться в исходниках.

лучшая вещь на свете это выход powerlevel10k, 9 был медленным и с плагинами очень даже тормозил, сейчас летает. Всем советую)

O_o
3683 коммита на расскрашивание командной строки :)

Результат прикольный, теперь скучный терминал пестрит красными жёлтыми мордочками :D
Для борьбы с длинными путями использую PROMPT_DIRTRIM в ~/.bashrc

image

А сам 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_clr/tst сначала формируются массивом а потом преобразуются в переменные, вот переменная git_clr и должна быть на выходе а я по ошибке туда массив засунул(в итоговом скрипте было правильно). Переделал так:
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
Да, и если сказать:
x=789

Получим:
$ echo $x ; echo ${x[0]} ; echo ${x[1]}
789
789
456

Все кто работал в консоли какого-нибудь Линукса наверно отмечали удобную особенность отображать текущую папку, имя пользователя, имя сервера и что-то еще в зависимости от дистра в строке приглашения. Мне тоже это всегда нравилось.

Я работал и отмечал, что это удобно, но мне это никогда не нравилось. В тру юниксе должен писаться не полный путь, а только название директории. Для полного пути есть команда pwd. Наличие полного пути превращает линукс из почти-юникса в почти-дос. Вот единственное вменяемое приглашение: export PROMP='[%n@%m %1~]%# '. (И да, разумеется это не bash. В идеале bash вообще не должен быть установлен, но в Linux этого довольно сложно достичь.)

Наличие полного пути превращает линукс из почти-юникса в почти-дос.

В почти VAX/VMS. Там не было понятия «дерево каталогов» и «на уровень вверх».

В тру юниксе должен писаться не полный путь, а только название директории. Для полного пути есть команда pwd.

Вот у меня параллельно с полдесятка задач над одним компонентом на трёх его ветках. Соответственно есть >=5 рабочих копий в разных каталогах. И у всех последний компонент пути, очевидно, одинаковый — имя компонента. Как мне отличить, где именно я сейчас работаю? Или тру-юниксоид не может работать в таком стиле, ибо грех великий? ;)

Ну, работа — это работа. Если это настоящая работа за деньги, то там в принципе нет места сопливым рассуждениям о "тру-юниксе" и тому подобному.


А отличить можно много как. Если консоли в иксах, можно сделать, чтобы полный путь в заголовке окна писался. Если консоли — виртуальные неиксовые, можно их логично распределить по номерам. Правда, номер тоже можно забыть… но это уже другая проблема. Если если используется что-то вроде tmux, то там тоже заголовки есть.

> А отличить можно много как.

Всё так. Но мне проще не надеяться на это и просить полный путь в PS1.

И да, он у меня двухстрочный уже лет 10 как.

Понятия «настоящая работа» и «за деньги» — вообще никак не связаны. У волонтеров в каком-нибудь Красном кресте — работа такая настоящая, что настоящее не придумаешь.


А формочки клепать, или джейсончик перекладывать — хоть и за стотыщмильёнов — настоящей работой даже язык не поворачивается назвать.


netch


тру-юниксоид не может работать в таком стиле, ибо грех великий?

Конечно, не может. Тру сделает git worktree и будет в PS1 смотреть не на имя папки, а на имя ветки. Как дети, чесслово :)

На имя ветки я могу смотреть и с liquidprompt, и он удобнее потому, что показывает в том числе отношение к upstream, количество изменений, режим (обычная работа, merge, rebase, am и т.п.) и ещё толпу параметров. И для Git это достаточно часто полезно. И другие альтернативы для того же есть.

Но это не отменяет необходимость полного пути.

> Как дети, чесслово :)

Это про вашу оценку собеседника :)
Мнэээ… я запутался в дереве ответов, простите.
Но всё равно worktree это ой не всегда лучший выход.
worktree это ой не всегда лучший выход

worktree— примерно никогда не лучший выход. Я не всерьез же.

Например, использовать «правильный» и удобный терминал

image

P.S. MacOS/iTerm2
Чтобы что-то появилось в заголовке терминала, туда надо его передать. Шеллы это делают через задание последовательностей в том же PS1. И что, если опять же с точки зрения того комментатора я не должен подавать в него полный путь, а должен только последнюю компоненту? Что вы этим сказать-то хотели?

> P.S. MacOS/iTerm2

Да сейчас больше проблема, как отключить терминалам эту функциональность — а то её абьюзить стали.

В корпоративной среде не всегда возможно установить терминал, который нравится, из-за ограничений безопасности. Но улучшить внешний вид командной строки возможно, просто немного дополнив кодом файл ~/.bashrc.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации