2010-12-29 3 views
4

내 셸 프롬프트에서 히스토리 명령 번호를 간헐적으로 표시하려면 어떻게해야합니까? 예를 들어, 모든 프롬프트에 표시하는 대신 7 번마다 해보십시오. (나는 zsh을 사용하고 있지만 bash는 사실상 동일해야한다고 생각한다.) 문제는 PROMPT 변수에 들어갈 때까지 % h가 평가되지 않고 $ HISTCMD가 항상 0으로 평가된다는 것입니다. 그래서 내 프롬프트에 다음과 같은 기능을 $ HISTCMD은 항상 0입니다 때문에 실패 퍼팅 :내 셸 프롬프트에서 히스토리 명령 번호를 간헐적으로 표시하려면 어떻게해야합니까?

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

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

이것은 부분적으로 해결 될 수 있지만 부분적으로 만, "%의 시간을"반향 대신 "$ HISTCMD"에 의해.

더 역사의 명령이 .zshrc 파일 내에서 기능 (것)하지 않는다는 사실에 의해 복잡하게되기 때문에 이런 일이 작동하지 않습니다

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

을 (당신이 사용하는 경우 bash는 "history 1"을 단지 "history"로 변경합니다.)

또한 역사 파일은이 정보의 출처로 사용할 수 없습니다 (적어도 내가 설정 한 것들이 있습니다. 이 설정 변경) zsh 세션이 닫히고 내역이 내 $ HISTFILE에 추가 ​​될 때까지 세션간에 내역이 공유되지 않습니다. 따라서 작동하지 않습니다.

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

저는 현재 불가능하다고 생각합니다. 나는 누군가를 사랑한다 나를 잘못 증명할 수 있습니다.

답변

4

프롬프트가 표시 될 때까지 평가를 지연하기 만하면됩니다. 큰 따옴표를 작은 따옴표로 변경하십시오.

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

나는 downvote가 무엇을위한 것인지 궁금합니다. –

+0

프롬프트에서'setopt promptsubst' (zsh'$()'를 추가하는 것을 잊었 기 때문에'zsh' 모드가 아니라'ksh'와'sh' 에뮬레이션 모드에서만 기본적으로 확장됩니다)? 그리고 PROMPT는 zsh에서 작동하지만 bash에서는 작동하지 않습니다. 여기에는'PS1' 변수 (zsh에서도 작동합니다)가 필요합니다. – ZyX

+0

@ ZyX : 당신이 옳을 수도 있습니다. 그러나 OP는 주로 zsh에 대해 묻고 있었고 문제의 단서를 기반으로 적절한 설정이되어 있다고 가정했습니다. 'setopt promptsubst'가 끝나면 따옴표가 문제의 원인이되는 문제입니다. 내가 좀 더 철저히해야만했던 것을 지적 해 주셔서 감사합니다. –

관련 문제