Linux 下 sleep 命令在 Windows 中的对应
在 Linux 中,我们有 sleep 命令可以使当前运行的脚本等待指定的秒数,如 sleep 5 等待 5 秒。在 Windows 中,我们也有类似的命令可以达到一样的效果,不过需要考虑好这些命令的兼容性,因为并非所有版本的 Windows 都带有这些命令。
首先,我们再来确认一下 Linux 中 sleep 命令的特性:
- 等待指定的秒数;
- 等待过程中不会有任何输出;
- 通过键入 Ctrl + C 来提前结束等待。
下文中的命令示例都以尽可能地达到和 Linux 下的 sleep 一样的效果为目标。
timeout
timeout 命令是自 Windows Server 2003, Windows Vista 起引入的命令:
timeout /t 5 /nobreak > nul
/t 选项指定等待的秒数;
/nobreak 选项使得等待只在输入 Ctrl + C 后提前退出,默认则是按任意键提前退出等待;
> nul 关闭 timeout 的输出,默认会打印出当前剩余的秒数。
缺点
-
timeout要求执行环境支持输入,即无法在无 console 的环境下使用,否则会报错ERROR: Input redirection is not supported, exiting the process immediately. - 另外,在 Cygwin 环境下,执行 Windows 的
timeout也会报上述错误,应该使用coreutils中的sleep。
sleep (Windows Server 2003 Resource Kit Tools)
Windows Server 2003 Resource Kit Tools 中提供了一个 sleep 命令,基本用法和实际效果与 Linux 中的 sleep 命令相同。
sleep 5
ping
Windows 下的 ping 命令每隔一秒发送一个 ICMP ECHO_REQUEST 包。因此可以利用 ping 命令来近似地模拟等待指定秒数的效果。
ping -n 6 -w 1000 localhost > nul
其中 -n 后指定发送 ECHO_REQUEST 包的数量,也就是我们需要等待的秒数 + 1。需要 + 1 是因为第一个包不经过等待就会被发送。
choice
choice 命令让用户在一系列选项中作出选择,并且可以被设置一个超时时间,因而也可以用来模拟等待。
在 Windows Server 2003, Windows Vista 及之后的版本可用。
choice /T 5 /C X /D X /N > nul
/T 指定用户作出选择前等待的时间;
/C 指定所有有效的选项,/D 指定超时后的默认选项;
/N 不打印有效的选项。
缺点
- 当用户输入了
/C参数中指定的选项之一后,等待就会提前结束。