【问题标题】:Why does wget does not work properly when followed by ftp on Cygwin Bash script?为什么在 Cygwin Bash 脚本上后跟 ftp 时 wget 无法正常工作?
【发布时间】: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

【问题讨论】:

  • 不应该是&lt;&lt;&lt;END_SCRIPT(用3个&lt;而不是2个)?

标签: bash ftp cygwin wget


【解决方案1】:

输出中的\r(也有一个%0D)表明存在问题。 Cygwin shell 脚本必须使用 Unix 行尾 (\n) 而不是 DOS/Windows 行尾 (\r\n)。

【讨论】:

  • 完美,谢谢。我会在未来寻找那个。我在记事本 ++ 中编辑了所有内容,并且没有视觉指示我正在使用哪些 EOL 标记:*(
猜你喜欢
  • 2011-06-13
  • 2023-03-04
  • 2012-12-15
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多