【问题标题】:Select random value from array before every prompt in bash在bash中的每个提示之前从数组中选择随机值
【发布时间】:2015-10-24 14:14:50
【问题描述】:

我正在尝试制作一个自定义提示,从以下列表中选择一个随机值:

color=(1 2 3 4 5 6)
much=(such very much many so)
wow=(wow hacker terminal geek confusion)

然后在每次提示之前执行此操作。

tput setaf $rcolor
echo -n "$rmuch $rwow $ "

问题是,如果我使用PS1,它会在终端启动时执行,并且不会在每次提示之前更新。 如何在每次提示之前收到不同的随机消息?

样本输出:

such hacker $
much wow $
very geek $
such wow $
much confusion $
very terminal $

【问题讨论】:

标签: bash prompt tput


【解决方案1】:

你必须转义$:

PS1="\$(tput setaf \${color[\$RANDOM%6]})\${much[\$RANDOM%5]} \${wow[\$RANDOM%5]}: "

PS1 在每次打印时都会被评估。

【讨论】:

    【解决方案2】:

    您也可以使用trap:

    much=(such very much many so)
    wow=(wow hacker terminal geek confusion)
    max=${#much[@]}
    trap 'PS1="${much[$((RANDOM % max))]} ${wow[$((RANDOM % max))]} $ "' DEBUG
    

    输出:

    much confusion $
    such terminal $
    such confusion $
    such geek $
    so terminal $
    very confusion $
    such geek $
    such terminal $
    much terminal $
    many geek $
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多