【发布时间】:2012-02-08 22:44:05
【问题描述】:
如果我在命令行上单独运行脚本中列出的 wget 命令,它可以正常工作并下载我指定的所有文件。如果我在脚本中直接使用 ftp 命令运行 wget,它不会下载文件,但 ftp 命令会成功删除它们。我不知道为什么会这样。在将控制权交给 ftp 命令执行之前,wget 命令不应该完全完成吗?
我正在使用安装了 Cygwin 的 Windows 7。下面是我使用 bash fileFetcher.sh 运行的 fileFetcher.sh 的内容。对于脚本和输出,我编辑了一些内容以删除用户名、密码和主机名。
另外我想提一下,我不太了解我使用的
同样,这两个命令/单独/都可以正常工作/但是一旦它们在脚本中,它们就不能很好地协同工作。
wget -r -l1 -nd --no-parent -A.tgz -t3 --user='username' --password='password' ftp://ftp.hostname.org/backups/
ftp -n -i -d ftp.hostname.org <<END_SCRIPT
quote USER username
quote PASS password
cd backups
mdelete *.tgz
ls
quit
END_SCRIPT
exit 0
此行下方是正在运行的 bash 脚本的输出。 wget 命令首先运行,并且不下载文件。
$ bash fileFetcher.sh
--2012-02-07 23:00:46-- ftp://ftp.hostname.org/backups/%0D
=> `.listing'
Resolving ftp.hostname.org (ftp.hostname.org)... 200.205.124.20
Connecting to ftp.hostname.org (ftp.hostname.org)|200.202.137.60|:21... connected.
Logging in as username ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /backups ... done.
==> PASV ... done. ==> LIST ... done.
[ <=> ] 467 --.-K/s in 0s
2012-02-07 23:00:47 (6.41 MB/s) - `.listing' saved [467]
Removed `.listing'.
--2012-02-07 23:00:47-- ftp://ftp.hostname.org/backups/%0D
=> `%0D'
==> CWD not required.
==> SIZE \r ... done.
==> PASV ... done. ==> RETR \r ...
No such file `\r'.
在此行下方,shell 脚本的 ftp 部分会登录并正确删除文件。
---> USER $username
---> PASS $password
---> CWD backups
---> TYPE A
---> PORT 192,168,0,91,223,12
---> NLST *.tgz
---> TYPE A
---> DELE website backup 2012-02-07 20-18-48.tgz
---> DELE website backup 2012-02-07 20-18-49.tgz
---> DELE website backup 2012-02-07 20-18-50.tgz
---> PORT 192,168,0,91,223,13
---> NLST
.
..
---> QUIT
【问题讨论】:
-
不应该是
<<<END_SCRIPT(用3个<而不是2个)?