Tcshでは、私はデフォルトを持っています:
Prompt [%m:%c3] %n%#
次のようなプロンプトが表示されます。
[woehler:hacking/c/hello] ajcarr%
そして
[woehler:~] ajcarr%
言い換えれば、現在のディレクトリと、パス内のその上の次の2つまでです。
Ksh93またはbashでは、$HOME
を~
で置き換えるのは簡単です。現在のディレクトリの名前だけを抽出するのと同じですが、%c3
の動作を複製する方法をまだ見つけていませんtcshの。現在ksh93で私は持っています:
[ajcarr@Woehler] hello $
そして
[ajcarr@Woehler] ~ $
これを行う方法について何か提案はありますか?
_ksh93
_で:
_PS1='${PWD#${PWD%?/*/*/*}?/} \$ '
share/doc/libnl-3-dev $ _
PS1='[${HOSTNAME%%.*}:${PWD#${PWD%?/*/*/*}?/}] $USER% '
[Host:share/doc/libnl-3-dev] user% _
_
_$HOME
_も_~
_に置き換えたい場合は、何かもっと簡単なものが必要です:
_PS1='$(d=${PWD/#$HOME/"~"};printf %s "${d#${d%?/*/*/*}?/}") $ '
~/w/maemo $ cd sb2-pathmaps
w/maemo/sb2-pathmaps $ _
PS1='$(d=${PWD/#$HOME/"~"};printf %s "[${HOSTNAME%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
[Host:w/maemo/sb2-pathmaps] user% _
_
これはbash
でも機能するはずですが、bash
には独自のプロンプトエスケープ(例:_\h
_ for _${HOSTNAME%%.*}
_)とパスの短縮がありますメカニズム(_Prompt_DIRTRIM
_を使用)。
また、bash
は_ksh93
_とは異なり、fork()
コマンド置換ごとに個別のプロセスを$(...; printf ...)
コマンド置換するため、より厄介なバリアントは本当に厄介ですビルトインだけが含まれています。これは、pdksh
のようなmksh
派生シェルにも当てはまります。
zsh
プロンプトエスケープはtcsh
とよく似ていますが、同一ではありません。
_zsh$ PS1='[%m:%3c] %n%# '
[Host:share/doc/libnl-3-dev] user% _
_
注意:
_$HOSTNAME
_変数は、デフォルトでは_ksh93
_に設定されていません。代わりにuname
ビルトインを使用できます(_PATH=/opt/ast/bin:$PATH
_で有効にした後、_/opt/ast/bin
_パスが存在する必要はありません):
_PS1='$(d=${PWD/#$HOME/"~"};h=$(uname -n); printf %s "[${h%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
_
Bashの_\h
_エスケープやzsh
やtcsh
の_%m
_エスケープとは異なり、これはwillホスト名の変更を追跡します。