GNU/Linux >> Linux の 問題 >  >> Linux

Tcshと同様にBashまたはKsh93でPs1プロンプトを生成する方法は?

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 これは ホスト名の変更を追跡します。


Linux
  1. Bashは最初の行を上書きします、Ps1 Bashプロンプト?

  2. bash プロンプトにアイコンを追加する方法

  3. LinuxでCで音を出す方法は?

  1. Bashでループを作成する方法

  2. ssh 経由で PS1 プロンプトをプッシュする

  3. Linuxのsh(bashではない)のコマンドプロンプトで現在のパスを表示するには?

  1. Bash履歴コマンドの使用方法

  2. LinuxでBashプロンプトをWinterize

  3. LinuxターミナルプロンプトでBashの色とコンテンツをカスタマイズする方法