【发布时间】:2021-12-26 05:54:06
【问题描述】:
以下代码在 Ubuntu 20.04 上运行良好。它检查 .csv 文件,该文件包含 A 列中的 URL。每个地址 URL 都在一个新行中。
要使用它,您需要输入以下内容来运行脚本:
bash script.sh file_with_urls.csv response_code
例如:bash script.sh urls-to-check.csv 200
#!/usr/bin/env bash
while read -r link; do
response=$(curl --output /dev/null --write-out %{http_code} "$link")
if [[ "$response" == "$2" ]]; then
echo "$link"
fi
done < "$1"
如果我在带有 WSL Ubuntu 20.04 发行版的 Windows 10 上使用它,我会收到“curl: (3) URL using bad/illegal format or missing URL”错误。
我有点卡住了……
【问题讨论】:
-
您需要找出一种方法来找出哪个 URL(从文件中)失败。在调用
curl命令之前echo它们或在成功调用后将它们打印到文件中......一旦你有了URL/罪魁祸首,你就可以看到它有什么问题(看看它是否遗漏了什么或者它在某种程度上是非法的)。没有任何额外的信息,除了猜测之外,我们没有其他简单的方法可以帮助您 -
read -r link正在将整行(不仅仅是第一个字段)读入link。请参阅BashFAQ #1: "How can I read a file (data stream, variable) line-by-line (and/or field-by-field)?" CSV 文件可能还包含DOS/Windows line endings,这又增加了一堆潜在的混乱。添加set -x作为脚本的第二行(就在shebang 之后)将打印一个执行跟踪,这将有助于显示此类问题。 -
在调试模式下我什么都不懂,但是 URL 地址末尾的第二行有 \r。认为是这种情况...
+ read link ++ curl --output /dev/null --silent --write-out '%{http_code}' {full_url_here}/\r' + response=000 [[ 000 == \4\0\4 ]]当我像 dan 一样执行 sed 时,脚本工作正常。感谢您指出消息来源,以便我了解究竟发生了什么以及为什么 -
blueface,谢谢你的回答。我明白你说的,但我不知道如何做到这一点...这是因为我的技能太低了无法执行此操作...
标签: bash if-statement curl httpresponse do-while