Какая ваша любимая подсказка Bash?

Каковы некоторые элементы в вашем любимом приглашении 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

Ответ 2

в .bashrc:

PS1='\$ '

(H/T @bitmask для редактирования)

Ответ 3

Поскольку я хожу между несколькими различными машинами весь день, мои рабочие станции 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\] "`

Ответ 4

Здесь моя.

# 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
$ 

Ответ 5

Мне нравится подсказка, чтобы рассказать примерно, как долго выполнялась предыдущая команда. Вот так:

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

Ответ 6

Моя подсказка:

[Пт сен 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    

Ответ 7

Я использую пользовательскую версию 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, пожалуйста, дайте мне знать... Я буду рад поставить его здесь или где-то еще легко доступным.

Ответ 8

У меня было это как мое приглашение bash в течение длительного времени:

PS1="(\d \t) (\[email protected]\h:\w)\nbash> "
export PS1

Ответ 9

Я изменил первый бит:

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

Ответ 10

у меня:

function prompt_err { 
  if test "$?" -eq 0; then PS1=': \W$; '; else PS1=': \W [ERROR#$?]$; '; fi
}
PROMPT_COMMAND=prompt_err
PS2='    '

ли:

  • показать имя каталога
  • позволяют копировать/вставлять всю строку в другую оболочку, чтобы повторно выполнить ту же команду, игнорируя приглашение
  • Если предыдущий статус выхода команды не был 0, распечатайте видимую ОШИБКУ со статусом
  • вторичное приглашение - это пробелы, позволяющие копировать/вставлять

Ответ 11

PS1="\n\e[30;1mUSER ( \e[0m\e[33;1m\w\e[0m\e[30;1m )\e[0m\e[33;33m\n$ \e[0m"

Ответ 12

Мне нравится держать (относительно) просто:

имя_пользователя @имя_хоста:/полный/путь >

PS1='\[email protected]\h:\w> '
export PS1

Ответ 13

Моя, дома, довольно проста:

[[email protected]:/full/CWD]$ 

На работе у нас есть понятие "среды" для пользователей, производящих и тестирующих, а приглашение

(env;sub-env) [[email protected]:/full/CWD]$ 

Ответ 14

Мне это нравится:

\[\033[33m\][\[email protected]\[\033[1;31m\]\h]\]\033[0m {\W}\n\033[1;34m\]\w\]\033[0m >

он помещает

[name]@[hostname]
[pwd] >

с [name] желтым, [hostname] красным и [pwd] синим цветом