【问题标题】:stop scripting in a specified time(2 mins)在指定时间(2 分钟)停止脚本
【发布时间】:2015-09-08 09:25:03
【问题描述】:
#!/bin/bash

commonguess(){
 for guess in $(< passwordlist)
 do
  try=$(echo "$guess" | sha256sum | awk '{print $1}' )
  if [ "$try" == "$xxx" ]
  then
   echo "$name:$try"
   return 0
  fi
done
return 1
}
dict(){...}
brute(){...}

while IFS=':' read -r name hashing;do
commonguess || dict || brute
done

我的代码已修复,我还需要做一件事。当我运行功能蛮力时,它应该在 2 分钟后停止。我知道 sleep 命令可以使脚本暂停,但是有人告诉我使用“kill”不是一个好主意。所以我想知道有没有办法做到这一点。

【问题讨论】:

  • sleep 120 &amp;&amp; kill $$ &amp;.如果您要终止脚本,那么使用 kill 不是问题。如果您担心清理,那么也可以使用陷阱。
  • 如果您使用的是for variable in $(cat file),您的代码尚未修复。请参阅此常见问题解答:mywiki.wooledge.org/DontReadLinesWithFor
  • while [[ $(date +%s) -lt $deadline ]]; do...?
  • @tripleee 感谢您告诉我,我昨天向老师展示了我的代码,我问他关于“cat 文件”的问题,他告诉我只需使用 $(cat 文件)。我刚刚在shellcheck上检查了它。现在我已经修好了!
  • 希望你的老师不要也没有缩进。

标签: bash shell scripting


【解决方案1】:

如果您更具体地了解 brute 的实际组成部分,您会得到更好的答案。

如果它是纯 shell 本身,让它管理其执行时间的最干净的方法是足够频繁地检查 SECONDS 变量,以便您可以自行中止进程,因为它超过了某个阈值。

它是外部的,你将无法避免kill。或者一些自己处理超时的调用包装器,可能已经存在。

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    相关资源
    最近更新 更多