所以我从 shell 运行以下命令
~/for ip in $(cat ip_list);do mkdir $ip; cd $ip; for vuln in $(snmap http);do nmap --script=$vuln $ip -oN $vuln;done cd ../ ; done
并且已经正常运行了大约一天。它正确创建目录并浏览它们。
然而,其中一个脚本现在挂起......
所以我想做的是使用类似于 CTR+C 的关键命令来终止 nmap 的迭代,但不退出正在运行的脚本。这样我就不必从头开始或修改我的 ips 列表。
答案1
这个答案是针对 Bash 的。
为此,您可以使用陷阱。这是一个说明性示例。要继续循环,请使用Ctrl+ c。除了关闭终端或从另一个终端杀死它之外,没有办法停止脚本。
#!/bin/bash
trap ps SIGINT
for i in a b c d; do
for j in w x y z; do
echo ----$i$j------ && ping stackexchange.com -c 10
done
done
exit
您的脚本看起来像这样(经过我的一些改进),但请注意它尚未经过测试:
#!/bin/bash
trap '' SIGINT
for ip in $(cat ip_list); do
mkdir $ip && cd $ip &&
for vuln in $(snmap http);do
nmap --script=$vuln $ip -oN $vuln
done &&
cd ..
done
我引入的更改&&
可以防止输入可能导致错误的逻辑路径。如果可能的话,施加这样的限制会更安全。当这样说时:
mkdir $ip; cd $ip;
如果无法创建目录,则会cd
导致错误。
当你这样说时:
mkdir $ip && cd $ip
如果由于某种原因尚未创建该目录,则不会cd
尝试。当你把mkdir $dir
从 到cd $dir
到的所有命令都用cd ..
链接起来时&&
,逻辑就清晰了,结构也不会出错。当您使用;
并创建目录失败时,您将无法进入该目录,但您可能不会无法更改为..
.
答案2
我知道我发帖然后回答,但我想保留这个答案,以防其他人遇到这个问题。
我所做的是从另一个外壳,我运行ps -a
然后找到我的 nmap 进程并用 杀死它kill proc-id
。该脚本继续进行下一次迭代。