Цветная подсказка в KornShell

Цветная подсказка в KornShell

В соответствии сэтот пост на StackOverflow, возможно, в KornShell есть цветная подсказка. Я не смог понять, как это сделать. Я могу использовать цвет:

echo -e "\033[34mLinux\033[00m"

выдает синий вывод «Linux», как и:

printf "\033[34mLinux\033[00m"

Однако, когда я включаю escape-коды в PS1переменную подсказки, они не экранируются. Что мне нужно сделать, чтобы получить цветную подсказку? Помимо того, что это своего рода приманка для глаз, я обнаружил, что цветная подсказка полезна при визуальном анализе вывода.

решение1

Просто используйте буквальный символ Esc, введенный с помощью Ctrl- v( Escбудет отображено так, как ^[на экране):

PS1="^[[34mLinux^[[00m"

Или используйте вывод команды, которая echo, как вы обнаружили, работает:

PS1="$(echo -e "\033[35mLinux\033[00m")"

решение2

Вам необходимо поместить в PS1переменную буквенный символ экранирования. Ksh88 и клоны, такие как pdksh и mksh (старые версии), не имеют буквального синтаксиса для управляющих символов, кроме как через printвстроенный. Mksh понимает \eэкранирование, но pdksh требует восьмеричный код \033.

PS1=$(print '\033[34mLinux\033[00m')

ATT ksh93 вводит синтаксис литерала с обратным слешем $'…'(также доступен в mksh с R39b). Вы можете использовать экранирование обратным слешем для помещения управляющих символов в эти литералы.

PS1=$'\e[34mLinux\e[00m'

решение3

Я использую их mkshдля пользователя shell:

# custom prompt see http://comments.gmane.org/gmane.os.miros.mksh/126
PS1=$'\a\r\a\e[1;34m\a ^ ^  ^ ^ | \a\e[36m\a${USER:=$(ulimit -c 0; id -un 2>/dev/null || echo
\?)}@${HOSTNAME%%.*}\a\e[34m\a | ^ ^  ^ ^ | \a\e[0;33m\a$(local d=${PWD:-?} p=~; [[ $p = ?(*/) ]] || d=${d/#$p/~};
print -nr -- "$d")\a\e[1;34m\a |\n ^ ^  ^ ^ | \a\e[32m\a$(date +%H:%M)\a\e[34m\a | ^ ^ >>\a\e[0m\a '

и немного отличается shellдля root:

PS1=$'\a\r\a\e[1;34m\a ^ ^  ^ ^  ^   \a\e[31m\a${USER:=$(ulimit -c 0; \
    id -un 2>/dev/null || echo \?)}@${HOSTNAME%%.*}\a\e[34m\a  ^ ^  ^ ^  ^ ^  ^   \a\e[0;33m\a$(
        local d=${PWD:-?} p=~
        [[ $p = ?(*/) ]] || d=${d/#$p/~}
        print -nr -- "$d"
)\a\e[1;34m\a  ^ ^ \n ^ ^  ^ ^  ^   \a\e[32m\a$(date +%H:%M)\a\e[34m\a  ^ ^  ^ ^   \a\e[0m\a '

введите описание изображения здесь

Так как специальные символы не копировались,вот паста pastebinкак для обычного пользователя, так и для пользователя root.

решение4

Благодаря предыдущим ответам и другим источникам мне удалось прийти к следующему:

Запрос оболочки Korn:

PS1="$(echo "\033[32m`logname`\033[35m@\033[32m`hostname` \033[33m`pwd`\033[36m\n\$\033[0m")"

Приглашение Bash:

PS1="\[\e[32m\]\u\[\e[35m\]@\[\e[32m\]\h \[\e[33m\]\w\[\e[36m\]\n\$\[\e[0m\]"

Они дают ту же цветную подсказку (да, я говорю на королевском английском ;) ) в формате:

username@computername /current/working/directory
$

Эквивалент в DOS (хотя и без цветовых опций):

prompt %username%@%computername% $P$_$G

который дает:

username@computername /current/working/directory
>

Символ ">" сохраняет значение 'DOSsy' вместо 'nixy' с "$", но если бы вы хотели использовать сигил ("$"), то это было бы так:

prompt %username%@%computername% $P$_$$

Если у вашей учетной записи есть необходимые разрешения, чтобы сделать «nixies» постоянными, добавьте к ним префикс «export»:

export PS1="..."

и измените DOSsy на:

setx PROMPT "%username%@%computername% $P$_$G"

или

setx PROMPT "%username%@%computername% $P$_$$"

Связанный контент