暂停用户输入但在X秒后继续

时间:2017-07-14 16:19:57

标签: bash

我已经敲了一个快速bash脚本来将备份从一台服务器rsync到另一台服务器,并将它们放在目标服务器上的正确文件夹结构中。

#!/usr/bin/env bash
fullnaspaths=$(ls -d /poolz1/server.example.com/accounts/*/jbm.*/*/)
total_paths=$(wc -l <<< "$fullnaspaths")
for path in $fullnaspaths
do
    let COUNTER=COUNTER+1
    user=$(basename $path)
    echo [$COUNTER of $total_paths] $user
    rsync -ia $path root@server.example.com:/backup/2017-07-11/accounts/$user/
done

但我想做的是在rsync命令之前立即添加断点,该命令会提示用户退出脚本或继续。我正在努力的一点是我如何添加一个超时,以便它可以继续,无论任何键输入,脚本继续循环后,让我们说60秒。

有谁知道是否以及如何实现这一目标?

非常感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用read -t

read -t5 -n1 -p"press any key in 5 seconds to cancel" && exit

printf "\n%s\n" "continuing"

答案 1 :(得分:1)

我的建议是像gentoo portage那样做。它从5到1计数,并表示您应该按Ctrl + C取消。像这样:

#!/bin/bash

echo "Press Ctrl+C to cancel"
for i in {5..1}; do
    echo -n "$i "
    sleep 1
done
echo
echo "Continuing..."