我在下面做了一个脚本。该脚本正在检查在列a中列出的每个URL的响应代码,例如。csv文件。一切都如我计划的那样工作,但检查所有URL后,脚本被冻结。我必须按ctrl+c组合键来停止它。如何使脚本在检查完所有URL后自动结束运行?
#!/bin/bash
for link in `cat $1` $2;
do
response=`curl --output /dev/null --silent --write-out %{http_code} $link`;
if [ "$response" == "$2" ]; then
echo "$link";
fi
done
您的脚本由于for link
行中的$2
而挂起(当它挂起时,检查ps aux | grep curl
,您会发现一个curl进程,响应代码作为最后一个参数)。此外,for link in `cat $1` $2
不是您应该如何从文件中读取和处理行。
假设您的example.csv
文件每行只包含一个URL,没有其他内容(这基本上使其成为纯文本文件),这段代码应该做您想要的:
#!/usr/bin/env bash
while read -r link; do
response=$(curl --output /dev/null --silent --write-out %{http_code} "$link")
if [[ "$response" == "$2" ]]; then
echo "$link"
fi
done < "$1"
逐字复制您的代码,并用空格分隔几个url来创建一个测试文件,它确实会挂起。但是,从for
的末尾删除$2
可以让脚本完成。
for link in `cat $1`;