【问题标题】:Unix Shell Script: sleep command not workingUnix Shell 脚本:睡眠命令不起作用
【发布时间】:2013-12-05 13:33:39
【问题描述】:

我有一个场景,我需要通过 curl 命令下载文件,并希望我的脚本在下载第二个之前暂停一段时间。我使用了 sleep 命令,例如 睡眠 3m 但它不工作。 有什么想法???

提前致谢。

【问题讨论】:

  • 你能给我们看一些代码吗?
  • “它不工作”不是很具有描述性。 sleep 怎么不工作?

标签: unix command sleep


【解决方案1】:

确保您的文本编辑器没有为每个新行添加 /r /n 并且仅添加 /n。如果您在 Windows 上编写脚本,这很典型。

使用 notepad++ (windows) 并进入编辑|EOL 约定|UNIX 然后保存。如果您在计算机上遇到问题,我从这里 [talk.maemo.org/showthread.php?t=67836] 读到您可以使用 [tr -d "\r" newname.sh ] 以消除问题。如果您想查看它是否有问题,请使用 [od -c yourscript.sh] 并且 /r 将出现在任何 /n 之前。

我看到的其他问题是 cd /dir/dir 并且你得到 [cd: 1: can't cd to /dir/dir] 或复制 scriptfile.sh newfilename 结果文件将被称为 newfilenameX 其中 X 是一个不可见的字符(确保在尝试之前可以将其删除),如果文件在网络共享上,Windows 机器可以看到该字符。确保它不是成功测试的最后一行。

直到我弄清楚(我知道我必须向谷歌询问可能以各种方式表现出来的东西)我认为我使用的这个 linux 版本存在问题(睡眠不在脚本中工作???) .

【讨论】:

  • 你成就了我的一天。被这个问题困扰了好几天。我无法在 Windows 上执行我在 notepad++ 中编辑的命令。当我选择正确的约定时,一切正常。非常感谢!
  • 天哪,非常感谢!我的脚本以一系列不明显的方式失败了,我并没有意识到这就是正在发生的事情。老实说,非常感谢你。如果不是这个答案,我不会想出来。
【解决方案2】:

您确定您以正确的方式使用sleep 吗?根据您的描述,您应该将其调用为:

sleep 180

这是你的做法吗?

您可能还需要考虑wget 命令,因为它有一个明确的--wait 标志,因此您可能会首先避免使用循环。

【讨论】:

    【解决方案3】:
    while read -r urlname
    do
        curl ..........${urlname}....
        sleep 180  #180 seconds is 3 minutes
    done  <   file_with_several_url_to_be_fetched
    

    ?

    【讨论】: