Почему wget не работает должным образом, когда за ним следует ftp в сценарии Cygwin Bash? - PullRequest
0 голосов
/ 09 февраля 2012

Если я сам в командной строке запускаю команду wget, указанную ниже в сценарии, в командной строке, она работает нормально и загружает все указанные мной файлы.Если я запускаю wget в сценарии с командой ftp сразу после него, он не загружает файлы, но команда ftp успешно удаляет их.Я понятия не имею, почему это происходит.Разве команда wget не должна завершиться полностью перед передачей управления команде ftp для выполнения?

Я использую Windows 7 с установленным Cygwin.Ниже приведено содержимое файла fileFetcher.sh, который я запускаю с помощью bash fileFetcher.sh.Как для сценария, так и для вывода я отредактировал некоторые вещи, чтобы удалить имена пользователей, пароли и имена хостов.

Также я хотел бы отметить, что я не совсем понимаю конструкцию <<END_SCRIPT, которую я использовал.Я нашел его на другом сайте и настроил для этого скрипта.Кажется, что это позволяет мне встроить скрипт в скрипт.Я не знаю, является ли это каким-то образом источником ошибки. </p>

Снова обе эти команды работают нормально / сами по себе / но как только они в сценарии, они не играют хорошо вместе.

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'.

Ниже этой строки часть 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

1 Ответ

1 голос
/ 09 февраля 2012

\r в выводе (там тоже есть контрольный сигнал %0D) указывают на проблему.Сценарий оболочки Cygwin должен использовать окончания строк Unix (\n), а не окончания строк DOS / Windows (\r\n).

...