【问题标题】:FTP Error HandlingFTP 错误处理
【发布时间】:2011-01-10 13:00:55
【问题描述】:

我有一个 KornShell (ksh) 脚本,它写出 FTP 脚本并执行以从 Windows 服务器获取一些文件到 UNIX。

echo "user <username> <pwd>" >ftpin.out
echo "bin">>ftpin.out
echo "get file.txt" >>ftpin.out
echo "get file2.txt" >>ftpin.out
echo "!echo $?">>ftpin.out
echo"bye">>ftpin.out

ftp -n -i servername <ftpin.out
echo $?

这里我无法检查文件是否存在于源 Windows 系统上。因为这种通常的错误处理不起作用并且 $?当任何文件存在而其他文件不存在时,始终为 0。我什至尝试检查 ERRORLEVEL,但这在 UNIX(Solaris 10)上不起作用。

任何人都可以展示简单的错误处理示例,哪些有效或如何做到这一点?日志文件解析也被考虑在内,但还有其他内置方式吗?其他 FTP 机制超出了范围。我们使用的是普通的旧 FTP。

【问题讨论】:

  • 停止使用ftp,改用wgetcurllftp
  • 抱歉...我目前的组织不希望这样。我对此束手无策。

标签: shell unix error-handling ftp ksh


【解决方案1】:

我不认为读 $?将工作。您只需从执行的子 shell 中获取值(使用 ! 命令)。

我建议你可以看看expect:http://expect.sourceforge.net/ 它是免费的,并且可能在您的 Linux 发行版的存储库中可用。

来自网页:

Expect 是一个自动化交互式应用程序的工具,例如 telnet、ftp、passwd、fsck、rlogin、tip 等。

【讨论】:

  • 感谢您的回复。但正如我所提到的,我目前只能使用 ftp 本身,而没有机会在我当前的环境中安装任何工具。
【解决方案2】:

感谢您的回复。我正在使用以下方法使其工作。

echo "user <username> <pwd>" >ftpin.out
echo "bin">>ftpin.out
echo "get file.txt" >>ftpin.out
echo "! [ ! -f file.txt ] && ksh alertme.sh" >>ftpin.out
echo "get file2.txt" >>ftpin.out
echo "! [ ! -f file2.txt ] && ksh alertme.sh" >>ftpin.out
echo"bye">>ftpin.out

ftp -n -i servername <ftpin.out

如果源服务器中不存在文件,则通过上述方法如果 FTP 无法复制一个文件,那么我将调用 alertme.sh 脚本向我发送错误消息。 这样我什至可以使用它来覆盖 ftpin.out 本身以停止在 ftp 中获取文件的下一次。我将为此测试下面的一个。

echo "! [ ! -f file.txt ] && echo bye>>ftpin.out" >>ftpin.out

再次感谢。希望这对面临类似困难的任何人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2012-05-28
    • 2018-02-22
    相关资源
    最近更新 更多