
tcsh にはデフォルト値があります。
prompt [%m:%c3] %n%#
次のプロンプトが表示されます。
[woehler:hacking/c/hello] ajcarr%
そして
[woehler:~] ajcarr%
つまり、現在のディレクトリとその上の次の2つのディレクトリがパスに含まれます。
ksh93またはbashから$HOME
byに置き換えるのは現在のディレクトリの名前を抽出するのと同じくらい簡単ですが、tcshの動作を複製する方法が見つかりませ~
んでした。%c3
現在、ksh93には次のものがあります。
[ajcarr@Woehler] hello $
そして
[ajcarr@Woehler] ~ $
これを行う方法について提案がある人はいますか?
答え1
存在する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% '
\h
bash または%m
escape inzsh
またはtcsh
this から脱出するのとは異なります。〜するホスト名の変更を追跡します。
答え2
Bashの場合は実装できます似たような結果は以下によって設定されます。PROMPT_DIRTRIM
変える:
$ PS1='[\u@\h] \w\$ '
[schaller@r2d2] ~$ pwd
/home/schaller
[schaller@r2d2] ~$ PROMPT_DIRTRIM=3
[schaller@r2d2] ~$ cd /home/schaller/tmp/513924/another/directory/here
[schaller@r2d2] ~/.../another/directory/here$