如何为终端制作动画bashshell提示符?

如何为终端制作动画bashshell提示符?,bash,animation,terminal,command-prompt,ubuntu-14.04,Bash,Animation,Terminal,Command Prompt,Ubuntu 14.04,我想在终端(Ubuntu 14.04)中制作一个动画光标提示, 所以我制作了这个脚本: while [ : ] do echo -ne '|\r' sleep 0.3 echo -ne '/\r' sleep 0.3 echo -ne '一\r' sleep 0.3 echo -ne '\\ \r' sleep 0.3 echo -ne '|\r' sleep 0.3 echo -ne '$\r' s

我想在终端(Ubuntu 14.04)中制作一个动画光标提示,
所以我制作了这个脚本:

while [ : ] do echo -ne '|\r' sleep 0.3 echo -ne '/\r' sleep 0.3 echo -ne '一\r' sleep 0.3 echo -ne '\\ \r' sleep 0.3 echo -ne '|\r' sleep 0.3 echo -ne '$\r' sleep 0.3 done 而[:] 做 echo-ne'\r' 睡眠0.3 echo-ne'/\r' 睡眠0.3 回声-ne'一\r' 睡眠0.3 echo-ne'\\\r' 睡眠0.3 echo-ne'\r' 睡眠0.3 echo-ne'$\r' 睡眠0.3 完成 但是当我把它放在.bashrc ps1
~/animated-prompt.sh&
中时,它会造成文本失真,我写的每一件事都会被
\r
字符覆盖。

那么有什么办法可以让这一切顺利进行吗?
(IDK,类似于将脚本放到终端正在处理的线程之外的另一个进程线程)

这个字符应该是a,但实际上是一个

保存并还原光标位置,而不是\r\n。移动到需要在保存和恢复光标位置之间设置动画的列位置

有关光标移动的信息,请参阅

修改脚本:

s="\033[s"
u="\033[u"

# Position of column
# As per my command prompt, i want 15th column( so 14C)
pos="\033[1000D\033[14C"
while [ : ]
do
    eval echo -ne '$s$pos\|$u'
    sleep 0.3
    eval echo -ne '$s$pos/$u'
    sleep 0.3
    eval echo -ne '$s$pos一$u'
    sleep 0.3
    eval echo -ne '$s$pos\\\\$u'
    sleep 0.3
    eval echo -ne '$s$pos\|$u'
    sleep 0.3
    eval echo -ne '$s$pos\$$u'
    sleep 0.3
done

[root@hello ~]|
在您使用时,它与.bashrc中的最后一行一起工作


谢谢

我也认为这个问题在stackoverflow上还可以。这在Askubuntutu上是离题的。你能告诉我你是怎么调用它的吗,也就是说,你把它添加到PS1的那一行吗?我在上面写了命令,但你读得不好<代码>~/animated-prompt.sh&但是我没有把它放在ps1中,我只是把它放在.bashrc文件的末尾。我试图将它放在ps1中,但这会使提示消失,因为此命令包含使其在后台运行的
&
。所以我还没有弄明白,但是如果动画问题解决了,那么我会弄明白这个问题。以及我如何将其放入ps1
\[$(~/animated-prompt.sh&)中
在PS1的结尾和结尾之前,您不能。
PS1
是一个包含单个字符串的变量,
bash
在该字符串完成之前不会显示提示。shell不允许您在显示提示后继续重写提示。这就是为什么我将其放在.bashrc文件的末尾,但ill提示没有焦点光标一直跟随打印字符并擦除回行首所以我想解决这个问题,或者它也没有解决方案?你是否尝试过这个脚本@Steven Pennt这是一个比连字符更好的字符。这个字符与我的问题没有任何关系脚本运行得很好。我只需要将光标焦点从这个脚本上移开,就可以开始在终端中编写命令,因为我写的所有内容都被我的脚本擦除了。感谢这个人,它离我很近,但是如果我想让这个脚本在一个单独的位置,而不想和我一起移动呢?我的意思是:@blacklock Modified script。你必须计算一下您的列位置,并根据它修改14C。我假设您使用的任何命令都不会超过1000列(因此为1000D)。
s="\033[s"
u="\033[u"

# Position of column
# As per my command prompt, i want 15th column( so 14C)
pos="\033[1000D\033[14C"
while [ : ]
do
    eval echo -ne '$s$pos\|$u'
    sleep 0.3
    eval echo -ne '$s$pos/$u'
    sleep 0.3
    eval echo -ne '$s$pos一$u'
    sleep 0.3
    eval echo -ne '$s$pos\\\\$u'
    sleep 0.3
    eval echo -ne '$s$pos\|$u'
    sleep 0.3
    eval echo -ne '$s$pos\$$u'
    sleep 0.3
done

[root@hello ~]|