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
参数中指定的选项之一后,等待就会提前结束。