2

我的 .bashrc 文件中有一个非常简单的 ps1 脚本,它执行了一个名为 blah 的随机脚本生成器。

export PS1="\[$(tput bold)\]\[$(tput setaf 1)\]\\$  \[$(tput sgr0)\] $PWD :: **$(. blah)** ::"

blah 脚本每次都应该在 shell 中导出一个随机字符串....

function silly {
     local RANDOMQUOTE=$[ ($RANDOM % 10 ) ] local fooey=('rand1' 'rand2' 'rand3' 'rand4' 'rand5'); 
     echo ${fooey[RANDOMQUOTE]}
}

silly

然而,这个脚本似乎只在我每次在 iterm 中创建一个新窗口时才被执行,当然这意味着这个脚本不再是随机的!

每次未调用随机函数的示例:

$   /Users/username :: rand2 ::
$   /Users/username :: rand2 ::
$   /Users/username :: rand2 ::
$   /Users/username :: rand2 ::

我在这里做错了吗?刚开始学习 bash 很抱歉缺少术语,随意编辑!

4

1 回答 1

3

正如单/双引号 ksh中所说:

"$PWD" 立即解决。(...) 当您设置为 '$PWD' 时,它不会立即解析,因此它会在使用时解析,并在您更改目录时更改。

所以改变

export PS1="[$(tput bold)][$(tput setaf 1)]\$ [$(tput sgr0)] $PWD :: $(. blah) ::"

为了

export PS1='[$(tput bold)][$(tput setaf 1)]\$ [$(tput sgr0)] $PWD :: $(. blah) ::'

也就是说,PS1='<code>'而不是PS1="<code>".

于 2013-07-26T15:28:21.563 回答