似乎无法运行此脚本,我有尝试下载的数据的用户访问权限,但它就是无法运行。如果有人能帮助使用 wget 脚本,我将不胜感激。
for i in $(seq 1 9); do wget -q --http-user="xxxxxx" --http-passwd="xxxxxx" http://cdaac-www.cosmic.ucar.edu/cdaac/rest/tarservice/data/cosmic2015/atmPrf/2015.00$i -O cosmic_atmPrf_2015.00$i.tar; done
答案1
正如 Sufiyan Ghori 所说,您收到的错误表明您正在尝试执行您没有权限执行的操作。
以下是一些值得关注和尝试的事情:
查看你正在使用哪个 wget 并检查权限(使用第一个命令的结果作为第二个命令的参数如果参数是一条路径)
type wget
ls -l /path/to/wget
你应该得到如下结果:
$ type wget
/usr/bin/wget
$ ls -l /usr/bin/wget
-rwxr-xr-x 1 root root 439944 May 4 17:07 /usr/bin/wget
如果最后一个
x
不-rwxr-xr-x
存在,则表示您无权运行该程序。通过locate bin/wget
以 root 身份运行 ;来查看系统上是否存在 wget 的不同位置chmod a+x /path/to/wget
。如果
type wget
命令返回其他内容,则从以下内容开始:wget is a function ...
wget is aliased to 'e1(){ return 126;};e1;'
那么别名或函数可能是问题所在。使用
unalias wget
或unset wget
清除它们,或者只更新你的脚本以使用 wget 的完整路径(which wget
应该为你提供 wget 可执行文件的路径)。如果您没有权限修复该问题,您可以用 curl 命令代替 wget - 它的功能相同,只是参数不同。
最后要看的一件事。在终端上,键入以下内容以使 bash 回显详细信息。
set -x
在您的命令中,将 更改
-q
为 a-S -v -d
以从 wget 获取详细信息。运行该命令并查看输出 - 那里可能有线索。用于
set +x
关闭 bash 命令回显
更新
关于您的评论:该命令中需要有一个空格:
ls -l /usr/bin/wget
如果你输入 /usr/bin/wget 会发生什么?还可以尝试输入不带任何参数的 curl(它不会执行任何操作),看看它是否正确执行。
使用以下输出更新您的原始问题:
ls -l /usr/bin/wget
- 运行“set -x”,然后运行
wget -S -v -d --http-user="xxxxxx" --http-passwd="xxxxxx" http://cdaac-www.cosmic.ucar.edu/cdaac/rest/tarservice/data/cosmic2015/atmPrf/2015.001 -O cosmic_atmPrf_2015.001.tar
确保混淆您的用户名/密码,但除此之外请显示完整的响应。 - 然后尝试同样的事情,但
set -x
仍然有效,但使用以下命令将 wget 替换为 curl。将用户名和密码替换为正确的 - 删除 < > 并确保:
它们之间有,例如 -u argonauts:argonautspw
curl -v -u <username>:<password> http://cdaac-www.cosmic.ucar.edu/cdaac/rest/tarservice/data/cosmic2015/atmPrf/2015.001 -o cosmic_atmPrf_2015.001.tar
第二次更新:
输出是什么echo $PATH
当您使用 /usr/bin/wget 时它有效吗?
进入 export PATH="/usr/bin:$PATH"
然后检查 wget 和其他命令是否有效。