tcshでは、デフォルトがあります:
prompt [%m:%c3] %n%#
次のようなプロンプトが表示されます:
[woehler:hacking/c/hello] ajcarr%
および
[woehler:~] ajcarr%
つまり、現在のディレクトリと、パス内のその上の次の2つまでです。
ksh93またはbashでは、 $ HOME
の置換 〜コード> 現在のディレクトリの名前だけを抽出するのと同じように簡単ですが、
%c3
を複製する方法をまだ見つけていません。 tcshの動作。現在、ksh93には次のものがあります:
[[email protected]] hello $
および
[[email protected]] ~ $
誰かがこれを行う方法について何か提案がありますか?
承認された回答:
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
${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% '
h
とは異なり bashまたは%m
でエスケープ zsh
でエスケープ またはtcsh
これは ホスト名の変更を追跡します。