2

我一直在拉我的头发。我是 bash 脚本和参加 Linux 大学课程的新手。这不是任何任务的要求,而只是个人发展。

我正在尝试在控制台上运行秒表(显示秒表),同时获取用户输入和做其他事情。

我已经研究了这个问题好几个小时。我想我只是在搜索错误的查询。

我创建了一个刽子手游戏(你在家伙被挂之前猜单词的字母)。

那是一次很棒的学习经历。现在我想要时钟来指示已经过去了多少时间。

任何建议或相关教程的链接将不胜感激。

到目前为止,我的测试代码不起作用,只是为计时器做了一个无限循环。

#!/bin/bash
# timer.sh

timer ()
{
    while true
    do
    tput cup 0 0
    echo $SECONDS
    wait 1
    done
}

display ()
{
    tput cup 5 0
    echo -n "This is output from other stuff"
    read -n1 letter
    #while read -n1 letter
    #do
    tput cup 7 0

    echo -n "type any letter"
    tput cup 9 0
    echo -n "You letter is: $letter"
    if [[ "$letter" == "x" ]]
    then
        exit
    fi
    #done
}

finished ()
{
    tput clear
    echo -n "This is the end of the program"
    kill $timer_pid 
    exit
}

# Main Body

trap finished SIGINT SIGTERM
tput clear
while true
do
    timer &
    timer_pid=$!
    display 
done

exit
4

3 回答 3

2

尝试更改wait 1sleep 1.

于 2012-05-02T11:14:16.897 回答
0
#!/bin/bash
#
# display time at line begin.
#
tick () {
  t=$(date +%T)
  echo -en "\r$t > " 
  sleep 10
  tick
}
tick 

如果您将此作为脚本调用./tick.sh &,它会始终在行首打印时间,但会干扰您自己的输入。

您可以将时间整合到您的提示符中(参见 man: bash/ PROMPTING),但这不会实现时间,只是在您插入每个命令后显示新时间。

于 2012-05-02T08:34:17.447 回答
0

由于您对 shell 脚本很熟悉,因此我提供了一个基本逻辑。此外,您编码/阅读文档的次数越多,您学到的越多,因此不提供实现。

Seconds=1
while true
do
    PrintWatch Seconds ## tput is an excellent option
    Seconds+=1
    Input=GetInputFromUserBlockFor_N_Seconds ## help read
    if Input == Stop
    then
        break
    fi
done
于 2012-05-02T07:30:04.983 回答