sleep
命令在你的 Linux 系统中会让计算机什么都不做。这似乎有些反常,但有时确实需要一段不活动的时间。本文将阐述如何有效利用这个 Bash shell 命令。
使用 sleep
非常简单。在命令行中输入 sleep
,接着一个空格,然后输入一个数字,最后按回车键。
sleep 5
光标会消失五秒钟,然后重新出现。发生了什么?在命令行使用 sleep
会指示 Bash 暂停处理你指定的时间。在上述示例中,这个时间是 5 秒。
我们可以以天、小时、分钟以及秒为单位设定 sleep
的时间。为此,在时间数值后添加 d
、h
、m
或 s
后缀。如果要让 sleep
暂停一天四小时七分钟五秒,可以使用如下命令:
sleep 1d 4h 7m 5s
后缀 s
(代表秒)是可选的。如果没有后缀,sleep
会将任何时间数值视为秒。假设你想让 sleep
暂停 5 分 20 秒。一个正确的命令格式如下:
sleep 5m 20
如果你忘记在分钟数值后添加 m
后缀,你将会指示 sleep
先暂停 5 秒,然后再暂停 20 秒。所以 sleep
总共会暂停 25 秒。
很多命令要求你按特定顺序输入参数,但 sleep
非常灵活。你可以按任意顺序输入它们,sleep
都能理解。你还可以使用浮点数作为参数。例如,0.5h
表示你希望 sleep
暂停半小时,这是一个有效的方法。
以下所有命令(尽管越来越奇怪)都指示 sleep
暂停 10 秒。
sleep 10
sleep 5 5s
Sleep 1 1 1s 1 1 1s 1 2
sleep 0.16667m
在命令执行前使用 sleep
暂停
sleep
命令可以用来在执行某个命令之前暂停。以下命令会暂停 15 秒,然后发出哔哔声。
sleep 15 && echo -en ' 07'
使用 sleep
在两个命令之间暂停
你可以使用 sleep
在两个命令之间引入暂停。以下命令会列出 Documents 目录中的文件,暂停五秒钟,然后将当前工作目录切换到你的主目录:
ls -R ~/Documents && sleep 5 && cd ~
使用 sleep
暂停脚本的执行
你可以在 shell 脚本中使用 sleep
命令来精确地暂停脚本的执行。通常,这样做是为了给某个进程足够的时间完成,然后再让脚本继续处理。你也可以使用它来限制脚本对其他资源的请求。
为了具体展示这一点,这里有一个脚本使用 curl
调用 Google Web 服务。当你使用 国际标准书号 查询一本书的编号时,它会返回有关该书的 JSON 数据。我们可以通过将数据传递给 jq
工具来解析该数据以提取书名。为了避免脚本对 Web 服务造成过大压力,它会在 Web 请求之间休眠一秒钟。
创建一个包含以下文本的文件,并将其保存为 check_book.sh
。
#!/bin/bash for book in `cat $1` do echo $book":" curl -s https://www.googleapis.com/books/v1/volumes?q=isbn:$book | jq '.items | .[] | .volumeInfo.title' echo "" sleep 1 done echo "All done."
输入以下命令设置执行权限,使脚本可执行。
chmod +x check_book.sh
这个脚本需要 curl
和 jq
工具。如果你使用的是 Ubuntu 或其他基于 Debian 的发行版,请使用 apt-get
将这些软件包安装到你的系统中。在其他 Linux 发行版上,请改用你的 Linux 发行版的包管理工具。
sudo apt-get install curl
sudo apt-get install jq
创建一个包含以下数字的文本文件,并将其保存为 books.txt
。
9781565921276 9781874416685 9781565921672 9780521431088 9781491941591
运行 check_book.sh
脚本,并将 books.txt
文件作为参数传入。
./check_book.sh books.txt
每隔一秒,向 Google 网络服务发送一个请求。查询每个 ISBN 编号后不久,就会显示书名。
这就是 sleep
命令的全部。check_book.sh
脚本的内部工作原理超出了本文的范围。之所以选择这个脚本,仅仅是为了演示 sleep
命令的有效使用。如果你想详细了解该脚本的两个主要组成部分,请参考 curl
的 项目页面 和 jq
的 在线手册。