KornShell のカラープロンプト

KornShell のカラープロンプト

によるとこのStackOverflowの投稿KornShell では色付きのプロンプトを表示できます。その方法がわかりません。色は使用できます:

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

次のようにすると、青色の「Linux」出力が表示されます。

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

しかし、エスケープ コードをPS1プロンプト変数に組み込むと、エスケープされません。色付きのプロンプトを表示するには、何をする必要がありますか? 見た目が美しいというだけでなく、色付きのプロンプトは出力を視覚的に解析するときにも便利です。

答え1

Ctrl-vで入力したリテラル Esc 文字を使用します(画面にはEscと表示されます)。^[

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

echoまたは、動作していることがわかったコマンドの出力を使用します。

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

答え2

変数にリテラル エスケープ文字を入れる必要がありますPS1。Ksh88 および pdksh や mksh (旧バージョン) などのクローンには、組み込み以外では制御文字のリテラル構文がありませんprint。Mksh は\eエスケープを認識しますが、pdksh では 8 進コード が必要です\033

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

ATT ksh93 では、バックスラッシュ エスケープ リテラル構文が導入されています$'…'(R39b 以降の mksh でも使用可能)。バックスラッシュ エスケープを使用して、これらのリテラルに制御文字を配置できます。

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 '

ここに画像の説明を入力してください

特殊文字がコピーされなかったため、ここにペーストビンペーストがあります通常ユーザーと 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
>

">" は、"$" で 'nixy' ではなく 'DOSsy' を維持していますが、代わりにシジル ("$") が必要な場合は、次のようになります。

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

ログイン アカウントに必要な権限がある場合、'nixies' を永続的にするには、先頭に "export " を追加します。

export PS1="..."

DOSsy を次のように変更します。

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

または

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

関連情報