Unix shell - 如何获得随机更改的提示

时间:2014-03-11 17:52:57

标签: shell unix random zsh prompt

我想知道每次按Enter时是否有任何改变提示的方法,例如:

[jtouzea - such prompt]  $>
[jtouzea - much style]   $> ls -l
total 0
drwx------+  5 jtouzea  2013  170 Mar 11 16:50 Desktop
drwx------+  2 jtouzea  2013   68 Mar 11 16:49 Documents
drwx------+  2 jtouzea  2013   68 Mar 11 16:58 Downloads
drwxr-xr-x@ 26 jtouzea  2013  884 Mar 11 17:20 Library
drwx------+  2 jtouzea  2013   68 Mar 11 16:50 Movies
drwx------+  2 jtouzea  2013   68 Mar 11 16:50 Music
drwx------+  2 jtouzea  2013   68 Mar 11 16:50 Pictures
drwxr-xr-x+  2 jtouzea  2013   68 Mar 11 16:50 Public
[jtouzea - wow]          $> echo "test"
test
[jtouzea - 10/10]        $>

我已经找到了允许这样做的$ RANDOM命令,但我需要这样做:

source ~/.zshrc

否则我不会改变我的提示。

有什么想法吗?

编辑: 目前我有:

PROMPT="[jtouzea - $RANDOM] $> "

在我的.zshrc

EDIT2: 我使用zsh,所以不幸的是,PROMPT_COMMAND似乎无法正常工作

EDIT3: 这是我的最终代码,现在问题已经解决了:

function precmd()
{
    sentence[1]="much prompt";
    sentence[2]="such style";
    sentence[3]="wow";
    nb=$[$RANDOM % 3 + 1];
    PROMPT="[jtouzea - ${sentence[$nb]}] $> ";
}

2 个答案:

答案 0 :(得分:2)

尝试使用PROMPT_COMMAND挂钩:

PROMPT_COMMAND() { randPromptNum=$[ $RANDOM % 3 ]; PS1=${POSSIBLE_PROMPTS[$randPromptNum]};}

对于zsh,您必须使用precmd代替PROMPT_COMMAND

在使用此功能之前,必须设置一个包含所有可能提示的变量:

POSSIBLE_PROMPTS[0]="such prompt: "
POSSIBLE_PROMPTS[1]="much style: "
POSSIBLE_PROMPTS[2]="wow: "

如果您想调整可能的提示数量,请记得编辑% 3

编辑 - 关于cygwin的结果

much style: echo hi
hi
such prompt: echo blah
blah
much style: pwd
/usr/bin
such prompt: yes y | head
y
y
y
y
y
y
y
y
y
y
wow: echo foo
foo
such prompt: 

答案 1 :(得分:0)

它与你的壳不一样,但你可以试试这个:

我编辑了我的.kshrc文件:

PS1="Look, it's random: \$RANDOM  \$ "

然后获取文件,并多次按Enter键:

/home/user  $ . .kshrc
Look, it's random: 2155  $
Look, it's random: 6032  $
Look, it's random: 13065  $

将所有短语放在文本文件或数组中,然后使用$ RANDOM查看。

注意:请记住逃避$