我想知道是否可以在 bash 脚本中让 sleep 具有从文件读取的可变时间?我想在脚本中执行长度可变的操作,这些操作将由另一个脚本设置时间。
答案1
timeout.txt
休眠文件中指定的秒数:
#!/bin/sh
read timeout <timeout.txt
date
sleep $timeout
date
或者使用bash
特定语法:
#!/bin/bash
date
sleep $(<timeout.txt)
date
答案2
一般来说,这只是将信息放入脚本的问题,与睡眠命令无关。
让我们制作一个简单的脚本“sleepytime”来从文件中获取信息(我假设该文件中只有一个整数值):
#!/bin/bash
sleep_time_X=$(cat "X.sleepytime")
sleep_time_Y=$(cat "Y.sleepytime")
echo "Going to sleep $sleep_time_X second(s)"
sleep $sleep_time_X
echo "Going to sleep $sleep_time_Y second(s)"
sleep $sleep_time_Y
然后在命令提示符下:
$ touch Y.sleepytime
$ touch X.sleepytime
$ echo "1" > X.sleepytime
$ echo "2" > Y.sleepytime
$ ./sleepytime
Going to sleep 1 second(s)
Going to sleep 2 second(s)
但这似乎不是一种普遍适用的方法。睡眠时间可能取决于我们无法控制的因素(例如网络请求、下载等)。那么最好等到工作完成。这可以通过命令来实现。wait
让我们创建一个额外的脚本来调用上面的睡眠脚本:
#!/bin/bash
# Call the sleep script and send it to background (with '&')
./sleepytime &
echo "Waiting for sleepyhead"
wait
输出为:
Waiting for sleepyhead
Going to sleep 1 second(s)
Going to sleep 2 second(s)
请注意,第一个脚本的输出位于“等待...”之后。也许这是您的一个选择...