Специальный PS1 для терминала: как избежать скобок в команде "perl" - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь настроить свой терминал, но не могу понять, как полностью завершить sh это:

В значении $ PS1 почти все уже сделано. Я сейчас работаю над PATH, который показан. Вот чего я хочу достичь:

  • измените $ HOME на ~
  • , если значение pwd <20 символов, оставьте это как </li>
  • , если значение pwd равно > 20 символов, поставьте 10 первых символов, затем "...", затем 20 последних символов

Вот моя ошибочная функция:

PWD() { 
    echo "$*" |perl -pne \
    's:^'"$HOME"':~:;'"$cygpwd"'s:^(.{10}).{4}.*(.{20})$:$1...$2:;'
}

Работает хорошо везде, но не удается с этой ошибкой, если я пытаюсь ввести папку с круглыми скобками:

- bash: подстановка команды: строка 1: синтаксическая ошибка рядом с неожиданным токеном `('

Не могу понять, как избежать скобок для регулярного выражения. Как я могу это сделать?

Вот мой полный файл:

# _________________________________________________________________________________________
# FUNCTIONS FOR PROMPT
GIT_BRANCH() { 
    local TEMP=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'); 
    [ ! -z $TEMP ] && echo "${TEMP} "
}
PWD() {
    echo "$*" |perl -pne \
    's:^'"$HOME"':~:;'"$TEMP"'s:^(.{10}).{4}.*(.{20})$:$1...$2:;'
}
# _________________________________________________________________________________________


# _________________________________________________________________________________________
# PROMPT COLOR INFO
# BACKGROUND                    COLOR (LEFT VALUE)  TYPE (RIGHT VALUE)
# Black background: 40          Black: 30           Normal Text: 0
# Blue background: 44           Blue: 34            Bold or Light Text: 1 (It depends on the terminal emulator.)
# Cyan background: 46           Cyan: 36            Dim Text: 2
# Green background: 42          Green: 32           Underlined Text: 4
# Purple background: 45         Purple: 35          Blinking Text: 5 (This does not work in most terminal emulators.)
# Red background: 41            Red: 31             Reversed Text: 7 (This inverts the foreground and background colors, so you’ll see black text on a white background if the current text is white text on a black background.)
# White background: 47          White: 37           Hidden Text: 8
# Yellow background: 43         Yellow: 33      
# _________________________________________________________________________________________
# BG SYNTAX:        \[\033[VALUEm\]
# COLOR SYNTAX:     \[\033[LEFT_VALUE;RIGHT_VALUEm\] or \[\033[LEFT_VALUEm\]
# _________________________________________________________________________________________

TEXT_COLOR="\[\033[30m\]"
PATH_COLOR="\[\033[33m\]"
BASIC_COLOR="\[\033[0;32m\]"
BASIC_COLOR="\[\033[0;32m\]"
GIT_COLOR="\[\033[34m\]"

if [ "$(id -u)" = 0 ]
then
    # root: red BG
    USER_COLOR="\[\033[41m\]"
elif [ "$(id -un)" != "$(basename $HOME)" ]
then
    # not root, not self: red text
    USER_COLOR="\[\033[31m\]"
else
    # user color
    USER_COLOR="\[\033[0;32m\]"
fi

# PROMPT TEXT
PR_USER="\u"
PR_HOST="\h"
PR_DIR_PATH="\$(PWD \w)"
PR_BRANCH="\$(GIT_BRANCH)"
PR_END="->"

PS1="${USER_COLOR}[${PR_USER}:${PR_HOST}] ${PATH_COLOR}${PR_DIR_PATH} ${GIT_COLOR}${PR_BRANCH}${PR_END} ${TEXT_COLOR}"

unset USER_COLOR TEXT_COLOR PATH_COLOR BASIC_COLOR BASIC_COLOR GIT_COLOR PR_USER PR_HOST PR_DIR_PATH PR_BRANCH PR_END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...