Вы сказали, что хотите отправить файл туда по FTP, но не сказали, был ли обычный FTP-клиент BSD единственным способом получить его там. BSD FTP не дает вам код возврата для условий ошибки, требующих всего этого анализа, но есть целый ряд других программ Unix, которые можно использовать для передачи файлов по FTP, если вы или ваш администратор их установите. Я приведу несколько примеров способов передачи файла по FTP, при этом перехватывая все ошибки с небольшим количеством кода.
FTPUSER - ваше имя пользователя ftp
FTPPASS ваш пароль FTP
ФАЙЛ - это локальный файл, который вы хотите загрузить без какой-либо информации о пути (например, file1.txt, а не /whwhat/file1.txt или любой другой файл / file1.txt
FTPHOST - удаленный компьютер, к которому вы хотите подключиться по FTP
REMOTEDIR - это АБСОЛЮТНЫЙ ПУТЬ к местоположению на удаленном компьютере, который вы хотите загрузить на
Вот примеры:
curl --user $ FTPUSER: $ FTPPASS -T $ FILE ftp: // $ FTPHOST /% 2f $ REMOTEDIR
ftp-upload --host $ FTPHOST --user $ FTPUSER --password $ FTPPASS --as $ REMOTEDIR / $ FILE $ FILE
tnftp -u ftp: // $ FTPUSER: $ FTPPASS @ $ FTPHOST /% 2f $ REMOTEDIR / $ FILE $ FILE
wput $ FILE ftp: // $ FTPUSER: $ FTPPASS @ $ FTPHOST /% 2f $ REMOTEDIR / $ FILE
Все эти программы будут возвращать ненулевой код завершения, если что-то пойдет не так, вместе с текстом, указывающим, что не удалось. Вы можете проверить это, а затем делать все, что захотите, с выходными данными, регистрировать его, отправлять по электронной почте и т. Д. По своему желанию.
Пожалуйста, обратите внимание на следующее:
«% 2f» используется в URL-адресах, чтобы указать, что следующий путь является абсолютным путем на удаленном компьютере. Однако, если ваш FTP-сервер поддерживает вас, вы не сможете это обойти.
для вышеприведенных команд, использующих фактический URL-адрес ( ftp: // etc ) для сервера со встроенными в него именем пользователя и паролем, имя пользователя и пароль ДОЛЖНЫ быть закодированы в виде URL, если содержит специальные символы.
В некоторых случаях вы можете проявить гибкость, если удаленный каталог является абсолютным, а локальный файл - простым именем файла, если вы знакомы с синтаксисом каждой программы. Возможно, вам просто нужно добавить переменную среды локального каталога или просто жестко закодировать все.
ЕСЛИ вы действительно, абсолютно ДОЛЖНЫ использовать обычный FTP-клиент, один из способов проверить его на наличие ошибок - в вашем скрипте, включив сначала команду PUTs для файла, а затем другую, которая выполняет GET того же самого файл, возвращающий его под другим именем. После завершения работы FTP просто проверьте наличие загруженного файла в сценарии оболочки или даже сравните его с оригиналом, чтобы убедиться в правильности его передачи. Да, это воняет, но, на мой взгляд, лучше иметь код, который легко читается, чем делать множество разборов для каждого возможного состояния ошибки. BSD FTP просто не так уж и хорош.