2010-12-29 15 views
4

シェルコマンドプロンプトで履歴コマンド番号を断続的に表示するにはどうしたらいいですか?たとえば、すべてのプロンプトに表示するのではなく、7回ごとに実行します。 (私はzshを使っていますが、bashは事実上同一でなければならないと思います)。%hはPROMPT変数に入るまで評価されず、$ HISTCMDは何らかの理由で常に0と評価されます。シェルコマンドプロンプトで履歴コマンド番号を断続的に表示するにはどうしたらいいですか?

prompt_history() { 
CYCLE=$(($HISTCMD % 7)) 
if [[ "$CYCLE" = "0" ]]; then 
echo -ne "$HISTCMD" 
fi 
} 

PROMPT="$(prompt_history) blah-blah >:" 

これは、部分的に部分的にしか代わりに「$ HISTCMD」の「%hを」エコー、しかしで固定することができます:$ HISTCMDは常に0であるため、だから私のプロンプトには、このような機能を置くことはできません。

それがさらにhistoryコマンドは、.zshrcファイル内の関数(ように見える)しませんので、このような何かが動作しないという事実によって複雑になる:

CYCLE="$(($(history 1 | wc -l) % 7))" 

(あなたが使用している場合bashは、 "履歴1"を "履歴"に変更します)。

また、ヒストリーファイルは、少なくとも私が設定したものを持っているので、この情報のソースとしては使用できません。この設定を変更します)zshセッションが終了し、その履歴が$ HISTFILEに追加されるまで、履歴はセッション間で共有されません。したがって、これは動作しません:

CYCLE="$(($(cat $HISTFILE | wc -l) % 7))" 

私はこれが現在不可能と信じるの危機に瀕しています。私は誰かが私を間違っていると証明するのが好きです。

答えて

4

プロンプトが表示されるまで、プロンプトの評価を延期するだけです。二重引用符を一重引用符に変更してください:

PROMPT='$(prompt_history) blah-blah >:' 
+0

私はダウンボートが何であったのだろうかと思います。 –

+0

プロンプトで 'setopt promptsubst'(zsh' $() 'を追加しなかったのは、' zsh'モードではなく、 'ksh'と' sh'エミュレーションモードでのみデフォルトで展開されていますか?そしてPROMPTはzshで動作しますが、bashでは動作しません。ここには 'PS1'変数(zshでも動作します)が必要です。 – ZyX

+0

@ ZyX:そうかもしれない。しかし、OPは主にzshについて尋ねていたので、問題の手掛かりに基づいて、適切な設定が適切であると仮定しました。 'setopt promptsubst'が実行された場合、引用符が問題の原因となる問題です。もっと徹底していたはずのことを指摘してくれてありがとう。 –

関連する問題