私はAIXとkshの両方を初めて使用していますが、現在の職場でいくつかのダウンタイムが発生しており、プロンプトに色を付けて現在の場所を表示するように構成したいと思います。
現在はログイン時に正しいパスを一度だけ取得し、その後は私のユーザーディレクトリが引き続き表示されます。カラー効果が素晴らしいです。ログ名とホスト名が正しい。
PS1="$(echo "\033[35m`logname`\033[34m@\033[35m`hostname` \033[36m`pwd`\033[1;35m\n\>\033[0m") "
スクリーンショットは表示できませんが、サンプル出力はすべてのディレクトリで次のようになります。
userid@hostname /home/look/a/subfolder
>
さまざまなバージョンを試してみましたが、何も表示できないか、すべての特殊文字が.profileに書き込まれた方法で表示されます。
何が間違っているのか、どんなアイデアがありますか?
編集:StéphaneのおかげでESC + CTRL + Vが動作し、ksh88です。オペレーティングシステム7.1
答え1
努力する:
eval "$(print "
fg_magenta='\033[35m' fg_blue='\033[34m' fg_cyan='\033[36m'
nl='\n' bold='\033[1m' sgr0='\033[m'")"
PS1="$fg_magenta$LOGNAME$fg_blue@$fg_magenta$(uname -n) $fg_cyan\$PWD$bold$fg_magenta$nl>$sgr0 "
つまり、シェルセッション中に変更されない項目は割り当て時に拡張されます(、、$
文字が`
含まれていない限り拡張するように求められたときに拡張されるようにリテラルを保存しようとするたびに、これらの内容は変更されます)。\
!
$PWD
$PWD
$PS1
$PWD
¹これらの拡張子に文字が含まれている場合は!
現在の履歴番号に拡張されるため、厳密に言うと${PWD//!/!!}
(${param//pattern/replacement}
ksh93演算子にもかかわらず)
答え2
私はいつも使う
PS1=$(hostname):'$PWD
$ '