是否可以通过后台脚本定期更改 PS1?

是否可以通过后台脚本定期更改 PS1?

我刚刚遇到了 PS1 变量。只需更改此变量值即可更改提示,例如:

PS1="\h"
hostname as Prompt
PS1="\j"
numbers of current jobs as Prompt
PS1="\t"
current time as Prompt
PS!="\j running on \h :"
or more complex string with many substitutions

现在,由于存在类似不占用 shell 的后台进程,我想是否可以编写一个脚本,每 5 秒更改一次 PS1 的值,该脚本可以在后台运行整个时间。

伪脚本:

Repeat

    {
    PS1="\j jobs"
    sleep 5 seconds
    PS1="time: \t"
    sleep 5 seconds
    PS1="Command History: \!"
    sleep 5 seconds
    }

如果可以的话,你会如何在 bash shell 脚本中实现它?

答案1

我认为这是不可能的,即使您将上述伪代码合并到 shell 脚本中,因为每次调用 shell 脚本时,它都会启动自己的子 shell,这些事情将在其中发生,而不是您想要的地方它到(你的主外壳)。即使您在后台启动它。 (脚本.sh &)

答案2

常见的 UNIX shell(bash、[pd]ksh、[t]csh)都没有自己的 cron 内部类似物,以便根据您的意愿执行自动后台任务。

但即使他们这样做了,在您运行命令并且它返回到提示符后,显示提示符的字符输出也是静态的,而不是动态的。如果你坐在那里观看,它不会像你想象的那样每 5 秒循环一次你的 PS1 选项。直到您按 Enter 键或运行另一个命令后,您才会看到新的提示。

然而,您也许能够通过使用具有“任务栏”功能的 GNU 屏幕来获得您正在寻找的内容。尝试从

相关内容