Ответ 1
Возьмите gander в " Bash пользователи: что у вас есть для вашего PS1?? для большого количества примеров.
Каковы некоторые элементы в вашем любимом приглашении Bash?
Мне нравится иметь показатель успеха самой последней команды, например (в .bashrc
):
function exitstatus {
EXITSTATUS="$?"
BOLD="\[\033[1m\]"
RED="\[\033[1;31m\]"
GREEN="\[\e[32;1m\]"
BLUE="\[\e[34;1m\]"
OFF="\[\033[m\]"
PROMPT="[\[email protected]\h ${BLUE}\W${OFF}"
if [ "${EXITSTATUS}" -eq 0 ]
then
PS1="${PROMPT} ${BOLD}${GREEN}:)${OFF} ]\$ "
else
PS1="${PROMPT} ${BOLD}${RED}:(${OFF} ]\$ "
fi
PS2="${BOLD}>${OFF} "
}
PROMPT_COMMAND=exitstatus
Возьмите gander в " Bash пользователи: что у вас есть для вашего PS1?? для большого количества примеров.
в .bashrc:
PS1='\$ '
(H/T @bitmask для редактирования)
Поскольку я хожу между несколькими различными машинами весь день, мои рабочие станции dev, dev и промежуточную среду, я взял раскраску имени машины в своих приглашениях со следующим фрагментом, чтобы дать визуальный индикатор, когда я смотрю на море условий на моих мониторах, к каким машинам они подключены:
# Color the hostname
if [ $HOSTNAME = 'claudius' ]; then
export HOST_COLOR="\[\033[1;36m\]"
fi
if [ $HOSTNAME = 'drooble' ]; then
export HOST_COLOR="\[\033[1;34m\]"
fi
if [ $HOSTNAME = 'davinci' ]; then
export HOST_COLOR="\[\033[1;31m\]"
fi
# Color the colon red if root
COLON_COLOR='0m'
if [ ${UID} -eq 0 ]; then
COLON_COLOR='1;31m'
fi
Затем полная переменная PS1 с цветным именем хоста, двоеточие (красный, если root, т.е. sudo -s) и полный путь:
PS1=`echo -ne "$HOST_COLOR\h\[\033[00m\]\[\e[$COLON_COLOR\]:\[\033[01;32m\]\w\[\033[00m\]\\[\033[01;33m\]\$\[\033[00m\] "`
Здесь моя.
# this prompt will show the hostname in green if the last command returned 0,
# otherwise it will be red.
PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\w\n\$
Похоже, что этот "ноутбук" зеленый, а остальная часть - терминал по умолчанию, конечно.
laptop:~/bin
$
Мне нравится подсказка, чтобы рассказать примерно, как долго выполнялась предыдущая команда. Вот так:
0:007 /home/jcl 0$ sleep 1
1:012 /home/jcl 0$
Он может быть реализован следующим образом:
bold='\[\e[1m\]'
plain='\[\e[0m\]'
set_begin()
{
if [ -z "$begin" ]
then
begin="$(date +"%s %N")"
fi
}
calc_elapsed()
{
read begin_s begin_ns <<< "$begin"
begin_ns="${begin_ns##+(0)}"
# PENDING - date takes about 11ms, maybe could do better by digging in
# /proc/$$.
read end_s end_ns <<< $(date +"%s %N")
end_ns="${end_ns##+(0)}"
local s=$((end_s - begin_s))
local ms
if [ "$end_ns" -ge "$begin_ns" ]
then
ms=$(((end_ns - begin_ns) / 1000000))
else
s=$((s - 1))
ms=$(((1000000000 + end_ns - begin_ns) / 1000000))
fi
elapsed="$(printf " %2u:%03u" $s $ms)"
if [ "$s" -ge 300 ]
then
elapsed="$elapsed [$(human_time $s)]"
fi
}
human_time()
{
local s=$1
local days=$((s / (60*60*24)))
s=$((s - days*60*60*24))
local hours=$((s / (60*60)))
s=$((s - hours*60*60))
local min=$((s / 60))
if [ "$days" != 0 ]
then
local day_string="${days}d "
fi
printf "$day_string%02d:%02d\n" $hours $min
}
timer_prompt()
{
status=$?
local size=16
calc_elapsed
if [ "${#PWD}" -gt $size ]
then
pwd_string="${PWD: -$size}"
else
pwd_string="$(printf "%${size}s" $PWD)"
fi
PS1="$bold$elapsed $pwd_string $status\\$ $plain"
begin=
}
set_begin
trap set_begin DEBUG
PROMPT_COMMAND=timer_prompt
Моя подсказка:
[Пт сен 19, 10:33]
[nat @Forge ~] $
#################################3
## File used for defining $PS1
bash_prompt_command() {
# How many characters of the $PWD should be kept
local pwdmaxlen=25
# Indicate that there has been dir truncation
local trunc_symbol=".."
local dir=${PWD##*/}
pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
NEW_PWD=${PWD/#$HOME/\~}
local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
if [ ${pwdoffset} -gt "0" ]
then
NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
fi
}
bash_prompt() {
local NONE="\[\033[0m\]" # unsets color to term fg color
# regular colors
local K="\[\033[0;30m\]" # black
local R="\[\033[0;31m\]" # red
local G="\[\033[0;32m\]" # green
local Y="\[\033[0;33m\]" # yellow
local B="\[\033[0;34m\]" # blue
local M="\[\033[0;35m\]" # magenta
local C="\[\033[0;36m\]" # cyan
local W="\[\033[0;37m\]" # white
# empahsized (bolded) colors
local EMK="\[\033[1;30m\]"
local EMR="\[\033[1;31m\]"
local EMG="\[\033[1;32m\]"
local EMY="\[\033[1;33m\]"
local EMB="\[\033[1;34m\]"
local EMM="\[\033[1;35m\]"
local EMC="\[\033[1;36m\]"
local EMW="\[\033[1;37m\]"
# background colors
local BGK="\[\033[40m\]"
local BGR="\[\033[41m\]"
local BGG="\[\033[42m\]"
local BGY="\[\033[43m\]"
local BGB="\[\033[44m\]"
local BGM="\[\033[45m\]"
local BGC="\[\033[46m\]"
local BGW="\[\033[47m\]"
local UC=$W # user color
[ $UID -eq "0" ] && UC=$R # root color
# without colors: PS1="[\[email protected]\h \${NEW_PWD}]\\$ "
# extra backslash in front of \$ to make bash colorize the prompt
#Nat Colored Prompt
PS1="${EMK}\n[${EMR}\d ${EMR}\@${EMK}] \n${EMK} [${UC}\u${EMK}@${UC}\h ${EMB}\${NEW_PWD}${EMK}]${UC}\\$ ${NONE}"
}
PROMPT_COMMAND=bash_prompt_command
bash_prompt
unset bash_prompt
Я использую пользовательскую версию Glandium.org Добавление некоторой информации VCS в приглашении bash. Самое большое, что я сделал, вытащил биты коллекции VCS в отдельный script.
Это подсказка замечательная, потому что она дает мне много информации, которую мне нужно знать о текущем проекте, над которым я работаю, в базе данных VCS. Я также настроил мой, чтобы показать результаты возврата команды, номер окна экрана, имена пользователей и машин и текущее время. Это довольно длинный (42 символа и более), но я использую широкие терминалы, так что это не имеет большого значения.
Например, моя текущая подсказка (после небольшого редактирования) выглядит так:
[0-1][email protected](g:proj1[topic/fix-123]app)[10:50]|$
Это означает, что последняя команда имела результат 0, в окне 1 экрана, когда майкл записывался в hal. Текущий каталог представляет собой рабочий каталог Git для proj1, внутри раздела /fix -123 в приложении для каталога в 10:50. Записан как обычный пользователь.
Кстати, если кому-то понравится мой настроенный script, пожалуйста, дайте мне знать... Я буду рад поставить его здесь или где-то еще легко доступным.
У меня было это как мое приглашение bash в течение длительного времени:
PS1="(\d \t) (\[email protected]\h:\w)\nbash> " export PS1
Я изменил первый бит:
function exitstatus {
EXITSTATUS="$?"
BOLD="\[\033[1m\]"
RED="\[\033[0;31m\]"
GREEN="\[\e[0;32m\]"
BLUE="\[\e[34m\]"
OFF="\[\033[m\]"
HOST="\h"
USER="\u"
DIR="\w"
NEWLINE="\n"
DATE="\d"
TIME="\t"
PROMPT="\[\033]0;${USER}@${HOST}: \w\007\n${RED}${TIME} ${DATE} [${USER}@${HOST}:[${BLUE}\w${RED}]"
if [ "${EXITSTATUS}" -eq 0 ]
then
PS1="${PROMPT} [${GREEN}${EXITSTATUS}${RED}]${OFF}\n$ "
else
PS1="${PROMPT} [${BOLD}${EXITSTATUS}${RED}]${OFF}\n$ "
fi
PS2="${BOLD}>${OFF} "
}
PROMPT_COMMAND=exitstatus
у меня:
function prompt_err {
if test "$?" -eq 0; then PS1=': \W$; '; else PS1=': \W [ERROR#$?]$; '; fi
}
PROMPT_COMMAND=prompt_err
PS2=' '
ли:
PS1="\n\e[30;1mUSER ( \e[0m\e[33;1m\w\e[0m\e[30;1m )\e[0m\e[33;33m\n$ \e[0m"
Мне нравится держать (относительно) просто:
имя_пользователя @имя_хоста:/полный/путь >
PS1='\[email protected]\h:\w> '
export PS1
Моя, дома, довольно проста:
[[email protected]:/full/CWD]$
На работе у нас есть понятие "среды" для пользователей, производящих и тестирующих, а приглашение
(env;sub-env) [[email protected]:/full/CWD]$
Мне это нравится:
\[\033[33m\][\[email protected]\[\033[1;31m\]\h]\]\033[0m {\W}\n\033[1;34m\]\w\]\033[0m >
он помещает
[name]@[hostname]
[pwd] >
с [name]
желтым, [hostname]
красным и [pwd]
синим цветом