Многие люди не считают командную строку особенно полезной и даже не уделяют ей особого внимания. Для меня это немного обидно, поскольку полезная подсказка может изменить способ использования командной строки. Я просмотрел Интернет в поисках лучших, наиболее полезных, а иногда и самых забавных подсказок bash. Вот, в произвольном порядке, те, которые я, скорее всего, буду использовать на своих компьютерах.
Примечание. Чтобы использовать любой из этих запросов, вы можете скопировать и вставить строку "PS1="прямо в свой терминал. Чтобы сделать изменение постоянным, вставьте строку в конец вашего ~ / .bashrc файла.
1. Покажите счастливое лицо после успешного выполнения
Эта подсказка, вероятно, самая забавная в списке, но остается полезной. Идея состоит в том, что, пока ваши команды выполняются успешно, ваше приглашение показывает счастливое лицо. Каждый раз, когда команда не выполняется, вместо этого отображается печальное лицо.
Пример:
Code:
PS1="\`if [ \$?=0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]\\$ "
2. изменить цвет при неправильной команде
Вот один из моих любимых. В этой подсказке есть все. Как и выше, приглашение меняет цвет, если ваша последняя команда не была успешно выполнена, но также сокращает длинные пути и содержит номер истории bash каждой команды для облегчения поиска.
Пример:
Code:
PROMPT_COMMAND= 'PS1="\ [\ 033 [0; 33m \ ] [\!] \ `if [[\ $?="0 "]]; then echo" \\ [\\ 033 [32m \\] "; else echo" \\ [\\ 033 [31m \\] "; fi \` [\ u. \ h: \ `if [[` pwd | wc -c | tr -d "" `> 18]]; then echo" \\ W "; else echo" \\ w " ; фи \ `] \ $ \ [\ 033 [0м \]"; echo -ne "\ 033] 0;` имя хоста -s`: `pwd` \ 007" '
3. Многострочная подсказка
Если вы из тех, кто хочет наполнить свою подсказку полной информацией, то вот она для вас. Это многострочное приглашение, содержащее дату / время, полный путь, пользователя и хост, активный терминал, даже количество файлов и использование пространства.
Пример:
Code:
PS1="\n\[\033[35m\]\$(/bin/date)\n\[\033[32m\]\w\n\[\033[1;31m\]\u@\h: \[\033[1;34m\]\$(/usr/bin/tty | /bin/sed -e 's:/dev/::'): \[\033[1;36m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files \[\033[1;33m\]\$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\033[0m\] -> \[\033[0m\]"
4. Управляйте цветом подсказки
В этой подсказке нет ничего особенного, кроме грамотного использования цвета для разделения различных частей информации. Как видите, он предоставляет время, имя пользователя, имя хоста и текущий каталог. Довольно минималистично, но полезно.
Пример:
Code:
PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
5. Показать полный путь
Это приятное, чистое, минимальное двухстрочное приглашение (плюс пустая строка вверху). У вас есть полный путь в первой строке и почти только имя пользователя внизу. Если вы хотите удалить пустую строку в начале каждого приглашения, просто удалите первый "\ n".
Пример:
Код:
PS1="[\[\033[32m\]\w]\[\033[0m\]\n\[\033[1;36m\]\u\[\033[1;33m\]-> \[\033[0m\]"
6. Показать количество фоновых заданий.
Еще один изящный двухстрочный лайнер, но в нем есть информация, которой мы раньше не пользовались. Первая строка - это обычный пользователь @ host с полным путем. Во второй строке у нас есть номер истории и количество заданий, выполняющихся в фоновом режиме.
Пример:
Код:
PS1= '\ [\ e [1; 32m \] \ u @ \ H: \ [\ e [m \] \ [\ e [1; 37m \] \ w \ [\ e [m \] \ n \ [\ e [1; 33m \] hist: \! \ [\ e [0; 33m \] \ [\ e [1; 31m \] вакансии: \ j \ $ \ [\ e [m \] ']
7. Отображение информации каталога.
Очень элегантный и приятный на вид быстрый дизайн. С этим у нас есть пользователь / хост, количество заданий и дата / время в верхней строке. Ниже находится текущий каталог, а также количество файлов в этом каталоге и их использование на диске.
Пример:
Код:
PS1="\n\[\e[30;1m\]\[\016\]l\[\017\](\[\e[34;1m\]\u@\h\[\e[30;1m\])-(\[\e[34;1m\]\j\[\e[30;1m\])-(\[\e[34;1m\]\@ \d\[\e[30;1m\])->\[\e[30;1m\]\n\[\016\]m\[\017\]-(\[\[\e[32;1m\]\w\[\e[30;1m\])-(\[\e[32;1m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files, \$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\e[30;1m\])--> \[\e[0m\]"
8. Моя подсказка
И, наконец, подсказка, которую мне лично нравится использовать. Это модификация №7, измененная, чтобы занимать меньше места и включать в подсказку только ту информацию, которую я больше всего хочу. Мне нравится двухстрочный стиль, поскольку он позволяет мне видеть полный путь, не уменьшая места для моих реальных команд.
Пример:
Code:
PS1="\n\[\e[32;1m\](\[\e[37;1m\]\u\[\e[32;1m\])-(\[\e[37;1m\]jobs:\j\[\e[32;1m\])-(\[\e[37;1m\]\w\[\e[32;1m\])\n(\[\[\e[37;1m\]! \!\[\e[32;1m\])-> \[\e[0m\]"
Если вы хотите поделиться своей подсказкой, сделайте это в комментариях ниже.
51 комментарий
Комментарии закрыты.
Как теперь показать расширенный набор символов через сеанс mingetty sshd?
Ой как заставить работать в шпатлевке?
Я уверен, что дело в среде RHEL 5 и кодировке, которую она отправляет. Любые идеи? Я изменил кучу настроек LANG и TERM на стороне сервера ...
Отличный материал, мне нравятся концепции, лежащие в основе всех них, думаю, я мог бы попробовать счастливое лицо!
Однако в будущем вы должны использовать png для изображений текста вместо jpg. Они будут выглядеть намного чище.
Приятно спасибо!
Я случайно оставляю материал на заднем плане немного часто, поэтому я использовал концепцию заданий, описанную выше, чтобы заставить ее ДОПОЛНИТЕЛЬНО сообщать о заданиях bg, если они есть.
PROMPT_COMMAND='PS1=”$ {debian_chroot: + ($ debian_chroot)} [33 [01; 32m] u @ h [33 [00m] [33 [01; 34m] W [33 [00m]` if [$ (jobs) | wc -l | tr -d "") -gt 0]; затем echo "[e [1; 31m] jobs: j [e [m]"; fi` $ e] 30; ha "‘
craig @ homei7 tmp jobs: 1 $
craig @ homei7 tmp jobs: 1 $ fg
vi / tmp / tmp1
craig @ homei7 tmp $
Спасибо за предложение, Крейг.
Для тех, кто хочет попробовать подсказку Крейга, есть небольшое раздражение при публикации такого рода кодов, когда любой экземпляр "нулевой обратной косой черты" отфильтровывается, поэтому все случаи "[33" фактически должны быть "[033" (дополнительное пространство добавлено к убедитесь, что этого не произошло с этим ответом)
LOL смайлик-команда. Прекрасный.
Как мне снова избавиться от этих команд (не волнуйтесь, они мне нравятся, но мне нравится знать, как что-то удалить перед установкой) Ура
Если вы не поместите его в файл .bash_profile или .bashrc, он не загрузится во время следующего сеанса, поэтому просто закройте окно. В противном случае просто удалите его из файла, в который вы его поместили.
Правильно, если вы вставите один из них в свой терминал, не сохраняя что-то вроде .bashrc, он исчезнет в следующий раз, когда вы откроете свой терминал. Вы также можете ввести "исходный .bashrc", чтобы восстановить приглашение по умолчанию.
выяснил. извините, не прочитал весь первый абзац.
http://slashdot.org/comments.pl?sid=108424&cid=9219400
это самая ранняя ссылка, которую я могу найти
http://slashdot.org/comments.pl?sid=108424&cid=9219400
это самая ранняя версия, которую я могу найти.
Моя подсказка zsh довольно мала.
PROMPT=’% ~>‘
RPROMPT=’% T’
Слева отображается канонический путь, а справа - время. Если команда слишком длинная, время удаляется.
~> cd ../ 9:56
/ home> 9:56
PS1=”[33 [01; 32m] u @ h [33 [01; 34m] w [33 [00m] $ (git branch 2> / dev / null | grep '^ *' | colrm 1 2) [33 [ 01; 34 млн. Долл. США [33 [00 млн] "
Что интересно в моем приглашении, так это то, что ветка репозитория git названа в приглашении
Спасибо, я подумал о добавлении хорошей подсказки git, которую нашел, но не думал, что так много людей заинтересуется, поэтому я рад, что кто-то добавил это в комментариях.
Кроме того, для других читателей комментария jrglasgow см. Комментарий выше о сломанных escape-кодах.
Что мне нужно сделать, чтобы отобразить прекрасные межстраничные символы в подсказке 7?
У меня был смешанный успех. Первоначально он отлично работал у меня в xterm и xterm, но выглядел сломанным в gnome-terminal. После того, как я повозился с ним, он больше не выглядел правильно!
Я бы посоветовал посмотреть, правильно ли это выглядит в другом терминале (например, xterm или wterm)
Люди кажутся счастливыми, поэтому я первым скажу, что эти подсказки ужасно уродливы.
Баш уродлив!
PS: Zsh не намного красивее, но RPROMPT действительно чертовски крутой.
Lol, # 1 определенно мой фаворит!
Проверьте это: http://www.students.itu.edu.tr/~yazicivo/files/lpsconf.sh
Найдите здесь мою подсказку bash, в которой отображается ветка git и измененные файлы:
http://code.extension.ws/post/181469611/git-prompt-rb
Запуск сценария ruby для каждого отображения подсказок довольно жирный=)
Хотя это хорошая подсказка!
Хорошо, так что, попив немного - я придумал тот, который мне нравится. Я был бы еще более счастлив, если бы мог понять, как заставить работать строчные символы (как в №7)…
Во всяком случае, этот основан на частях №1 и №7. Он содержит user @ machine, временную метку и каталог в одну строку - и количество заданий, индикатор успеха / неудачи (зеленый :-) в случае успеха или красный :-( в случае неудачи) во второй строке. за которым следует $
PS1=”n [e [30; 1m] ([e [34; 1m] u @ h [e [30; 1m]) - ([e [34; 1m] t [e [30; 1m]]] - ( [[e [32; 1m] w [e [30; 1m]) [e [30; 1m] n (jobs: [e [34; 1m] j [e [30; 1m]] "` if [$? -экв 0]; затем echo [e [32m] :-); иначе echo [e [31m] :-(; fi` [e [0m] $ ”)
# Теперь мне нужно поработать :-)
Возможно, он не вставил правильно, он недействителен, когда я пытаюсь проверить.
Как отмечалось в комментариях выше, коды bash не всегда отображаются правильно, не уверен, что это наша CMS или какие-то браузеры или что-то еще. Если у вас есть ссылка на текстовую версию или что-то в этом роде, поделитесь.
Благодаря ответу Джошуа Прайса выше, я могу снизить уровень разочарования любого, кто хочет попробовать опубликованную мной PS1, предоставив ссылку на версию без искажений:
http://media.stray-hound.com/prompt.sh
bash: синтаксическая ошибка рядом с неожиданным токеном `[e [34 ′
Прочитав это, я нашел время, чтобы написать промот, и вспомнил, почему я использую zsh.
хотя синтаксис zsh легче читать, я взял идею из одного из /. ответил и создал этот файл, который я затем получил из .zshrc
————————— setpromt-zsh ———————–
RESET_COLOR=”% f”
COLOURED_RETURN_VAL=”% (?,% F {зеленый},% F {красный}) (%?) ”
SHORT_PWD=”% 3 ~ ”
ROOT_OR_NOT=”% # ”
БЕЛЫЙ=”% F {белый} ”
# Сложите все вместе
PROMPT=”$ {COLOURED_RETURN_VAL} $ {WHITE} $ {SHORT_PWD} $ {ROOT_OR_NOT}> $ {RESET_COLOR}”
RPROMPT=”% F {желтый}% T% f [% !] "
—————————– EOF ————————-
дает мне это
(0) ~%> 0:36 [3081]
(0) ~%> return 123 0:37 [3081]
(123) ~%> 0:37 [3082]
здесь не видны цвета,
но возвращаемое число становится красным, если оно не равно нулю.
Для этого я использую bashstyle.
http://blog.amit-agarwal.co.in/2009/06/17/bashstyle-rpm-for-fedora-11-style-up-your-bash-prompt/
Я только что нашел эту статью и решил собрать воедино то, что я смог выяснить из этих примеров.
PS1=”[e [37; 1m] - {[e [34; 1m] u @ h [e [37; 1m]} - n [e [37; 1m]] ([e [34; 1m] w: $ (/ bin / ls -1 | / usr / bin / wc -l | / bin / sed 's: :: g') файлы, $ (/ bin / ls -lah | / bin / grep -m 1 total | / bin / sed 's / total //') b [e [37; 1m]) n–> [e [0m] "
Это трехстрочная подсказка. Имя и хост вверху, каталог посередине и подсказка в последней строке.
По сути, глупо помещать в подсказки управляющие последовательности, зависящие от терминала. По какой-то причине были изобретены terminfo и termcap.
Раймонд
Используйте termcap или terminfo для escape-последовательностей.
Мой любимый: PS1=’C: $ {PWD //// \}>’
Это выглядит так:
C: homemaciek>
Это просто больно. РЖУ НЕ МОГУ! :)
По поводу строковых символов? а также ? в # 7
Они взяты из кодовой страницы Microsoft cp437, но сопоставлены с Unicode.
См. Http://en.wikipedia.org/wiki/Cp437
Итак, пока вы используете терминал с поддержкой utf-8 (по умолчанию в большинстве современных дистрибутивов) и ваши шрифты терминала настроены правильно, вы можете просто скопировать и вставить их.
PS1=”n [e [30; 1m]? ([E [34; 1m] u @ h [e [30; 1m]) - ([e [34; 1m] j [e [30; 1m]]" - ([e [34; 1m] @ d [e [30; 1m]) -> [e [30; 1m] n ?? ([e [32; 1m] w [e [30; 1m]] "- ([ e [32; 1m] $ (/ bin / ls -1 | / usr / bin / wc -l | / bin / sed 's: :: g') файлы, $ (/ bin / ls -lah | / bin / grep -m 1 total | / bin / sed 's / total //') b [e [30; 1m]) -> [e [0m] "
Примечание. В исходном коде, приведенном выше, после первого дефиса во второй строке есть лишний символ "[".
Ха-ха…
Их здесь тоже нет…
Просто замените? В строке, которую я дал выше, соответствующими символами, скопированными с http://en.wikipedia.org/wiki/Cp437
Кроме того, вы можете сгенерировать их прямо в своем терминале с помощью:
echo -e "xe2x94x8c"
echo -e "xe2x94x94"
И я использовал длинное тире
echo -e "xe2x94x80", которое выглядит лучше в большинстве терминалов.
Продолжая обсуждение управления версиями, я опубликовал функцию bash, которая отображает текущую ветку для Git, Mercurial, Subversion и даже RCS:
http://improbable.org/chris/index.php?ID=227
№7 - это * действительно * дорогие ресурсы, если они используются в любой серверной среде. Используйте его с осторожностью и осторожностью, иначе у вас могут возникнуть проблемы, когда они менее ожидаемы (хотя неустановленный PS1; exec bash решит вашу проблему)
Я использую многострочное приглашение, которое начинается с символа # как такового:
PS1=”n # - [[e [1; 36m] u @ h [e [m]] - [[e [1; 34m] w [e [m]]] - [$ (date +% k:% M )] -> п "
Этот запрос отображается как:
# - [user @ host] - [/ path / to / working / dir] - [13:46] ->
(курсор находится здесь, на новой строке)
Это приглашение дает мне (ИМХО) самую важную информацию с первого взгляда, на какой машине я нахожусь, где я на ней, и время запуска и завершения каждой из моих команд.
Настоящее удовольствие в этом приглашении заключается в том, что я могу скопировать весь экран терминала и просто вставить его в сценарий оболочки без необходимости редактирования: # в каждой строке приглашения закомментировал это!
Попробуйте, вам понравится, или ваши деньги вернутся!
Первоначально я подумывал поместить что-то подобное в статью, но не мог придумать хороший способ продемонстрировать эту мысль с помощью снимков экрана. Спасибо!
Другой (превосходный IMHO) способ разрешить копирование / вставку всей строки - это приглашение, которое выглядит примерно так:
: ваша информация здесь;
например
: / путь / [vc rev]: статус выхода;
потому что: - это команда bash, которая ничего не делает, а; завершает эту команду и позволяет вашей команде выполняться. Пользуюсь им, так как ненавижу многострочные подсказки (конечно, без обид на тех, кому они нравятся).
Здесь много интересных идей, в ближайшее время мне придется изменить свой .bashrc.
На данный момент это мое приглашение bash, после случайной перезагрузки моего ноутбука вместо моего сервера в восьмой раз за 12 часов я решил использовать отдельные командные подсказки для локального входа и входа в SSH:
если [-z "$ SSH_CLIENT"]; тогда
PS1='[e [0; 32m] u [e [m] [e [1; 34m] w [e [m] [e [1; 32m] $ [e [m] [e [0 ; 37m] '
else
PS1=' [e [0; 32m] u [e [m] [e [1; 31m] @ [e [m] [e [1; 33m] h [e [m] [e [1; 34m] w [e [m] [e [1; 32m] $ [e [m] [e [0; 37m] '
fi
Насколько мне известно (я не проводил глубокого поиска), не многие люди делали отдельные запросы для разных учетных записей. Кто-нибудь знает кого-нибудь еще, кто это делает?
P.S. Извините за поздний комментарий, но я всегда опаздываю на эти сообщения в блоге. Почему никто мне ничего не говорит, пока это не произойдет?
Я не видел, чтобы кто-то еще менял запрос на основе статуса SSH, но у многих людей есть одно приглашение для root, а другое для пользователей.
Что касается задержки в поиске / комментировании, я бы порекомендовал программу для чтения каналов, чтобы оставаться активным в ваших любимых блогах. Почти все блоги (включая MTE) имеют RSS-каналы, которые вы можете отправить в нечто вроде Google Reader.
может кто-нибудь помочь мне объединить № 8 и № 2?
мне нравится информация, предоставленная № 8, но также трюк становится красным при неправильной команде № 2: так как будет выглядеть код для версии № 8 где все зеленые части становятся красными после неверной команды? не могу понять это самостоятельно.
как насчет чего-то вроде этого
если [[$?="0"]]; тогда цвет=”\ [33 [32м \]”; иначе цвет=”\ [33 [31м \]”; fi
вы можете поставить это условие, чтобы задать цвет, и использовать переменную color в # 8, чтобы установить цвет.
Я использую это в большинстве своих учетных записей, первая строка устанавливает окно терминала, чтобы читать "hostname: username - workingdir" абсолютно необходимо, когда у вас есть 20+ окон xterm / aterm / rxvt, открытых для нескольких компьютеров на одной панели задач.
PS1=”[33] 0; h: u - w07]
[33 [1; 37m] [
[33 [1; 35m] $ (date +% H:% M)
[33 [1; 36m] h
[33 [1; 31m]:
[33 [1; 32m] w
[33 [1; 37m]]]
[33 [0m] “
Спасибо! Я люблю это! Сейчас использую номер 2 :)
Сложно решить, что использовать сейчас…
Когда я использую номер 2, я не могу копировать удаленные файлы с помощью scp.
Я могу использовать ssh, но не могу копировать файлы, почему?
Это очень странно, потому что я использую эту подсказку почти неделю :)
и я потерял два дня в поисках ошибки!
Мне нужна помощь, вот отладка scp:
debug1: Следующий метод аутентификации: пароль
пароль:
debug1: Аутентификация прошла успешно (пароль).
debug1: channel 0: new [client-session ]
debug1: вход в интерактивный сеанс.
debug1: среда отправки.
debug1: отправка env LANG=en_US.UTF-8
debug1: команда отправки: scp -v -t / tmp
……….
Я застрял здесь.
Ps: Решено с использованием старой командной строки PS1 bash :)
Я люблю счастливое лицо!
Чтобы уточнить для MacOS X:
Если вы хотите применить эти изменения навсегда, вам не нужно искать или создавать файл .bashrc, просто добавьте файл .profile в свой домашний каталог, поскольку MacOS считывает этот файл для переменных среды.
это для поклонников "Звездных войн" и "Красных гномов". Мне было скучно, поэтому я для развлечения собрал эту подсказку. Знаю, ничего особенного, но меня это устраивает: D. Содержит в основном коды отсюда (а верхний текст взят из программы 'figlet')
Код: http://pastebin.com/QuLzm7HG
Кстати, можно ли получить часы в 12-часовом формате (было бы неплохо иметь после него статус am / pm)