KornShellの色付きプロンプト


11

このStackOverflowの投稿によると、KornShellで色付きのプロンプトが表示される可能性があります。これを行う方法を理解することができませんでした。私は色を使うことができます:

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

青色の「Linux」出力が表示されます。

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

ただし、エスケープコードをPS1プロンプト変数に組み込むと、エスケープされません。色付きのプロンプトを取得するにはどうすればよいですか?見栄えをよくするだけでなく、出力を視覚的に解析するときに色付きのプロンプトが役立つことがわかりました。

回答:


10

ただで入力されたリテラルEscキーの文字を使用Ctrl- 、vEscのように表示されます^[:画面上)

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

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

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

私がまだコマンドラインの初心者であることに気づくのは、このようなときです。友達と比べて、いつも気持ちがいい。:)最初のバージョンはうまくいきました。なんてすてきなトリックだ!私は2番目のバージョンで成功しませんでした。+1
カザーク、2007

5

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'

2
実際、これmkshもサポートしています$'…'–確かに、Dave Korn(Korn ShellのKorn)が私が追加すると主張したためです。
mirabilos 2014

@mirabilosああ、ありがとう。私はおそらくmksh R39を搭載したマシンでその回答を入力し、新しいバージョンをチェックしませんでした。
Gilles 'SO-邪悪なことをやめる'

2

私はこれらを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 '

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

特殊文字はコピーされなかったので、通常のユーザーとルートの両方のペーストビンペーストを次に示します。


1

人々の答えにはいくつかのことがあり、それぞれに異なる構文が含まれています。

  1. ドキュメントに記載されているターミナルプログラムのエスケープシーケンス。

  2. PS1変数のターミナルエスケープシーケンスをエンコードする方法(たとえば、\ eまたはリテラルエスケープ)。これはシェルに依存します。

  3. ホスト名、現在のディレクトリなどの変更情報をプロンプトに追加する方法。これはシェルにも依存します。\ wのような特別なバックスラッシュシーケンスを作業ディレクトリに使用できる場合や、環境変数に名前を付けるか、コマンドラインを文字列に埋め込む必要がある場合があります。

  4. どの文字を印刷し、どの文字を印刷しないかをシェルに伝える方法。シェルは、ターミナルエスケープシーケンスの開始位置と終了位置を認識していません。シェルがコマンドラインエディターまたは同様の何かを備えている場合、カーソルがどこにあるかを知るために、印刷する文字を知る必要があります。この詳細がなければ、プロンプトは正しく見えるかもしれませんが、編集が奇妙に動作する可能性があります。

    • bashでは、各エスケープシーケンスの前に\ [を置き、その後に\]を置きます。

    • kshでは、文字列の他の場所では発生しない単一の非印刷ASCII文字を選択します。文字列の最初に、その文字を書き、その後にASCII改行を続けます。次に、各エスケープシーケンスの前後に同じ文字を書き込みます。z3ntuはマーカー文字として\ aを選択しました。


0

以前の回答と他の情報源のおかげで、私はこれらを思いつくことができました:

Kornシェルプロンプト:

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

バッシュプロンプト:

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

ログインアカウントに「ニキシー」を永続的に追加するために必要な権限がある場合は、「エクスポート」を先頭に追加します。

export PS1="..."

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

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

または

setx PROMPT "%username%@%computername% $P$_$$"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.