在 KornShell 脚本内检查 FTP 成功/失败

发布于 2024-11-08 12:15:39 字数 59 浏览 0 评论 0原文

想知道在 KornShell (ksh) 脚本中检查文件传输协议 (FTP) 是否成功的正确方法是什么。

Wondering what are some of the right ways to check whether File Transfer Protocol (FTP) succeeded or not inside the KornShell (ksh) script.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初懵 2024-11-15 12:15:39

有如此多的 ftp 客户端,而且其中许多客户端不一定遵循 std 返回约定,因此您必须进行一些简单的测试,然后进行相应的编码。

如果幸运的话,您的 ftp 客户端确实会返回 std 退出代码,并且它们通过 man ftp 进行记录(您确实了解手册页吗?)。在这种情况下,0 表示成功,任何非零表示某种问题,因此最简单的解决方案类似于

if ftp user@remoteHost File remote/path ; then
    print -- 'sucessfully sent file'
else
    print -u2 -- 'error sending file'
fi

( 不太确定 ftp user@remoteHost 文件 remoteDir 是否完全正确,(我现在无法访问客户端,并且已经多年没有使用 ftp(您不应该使用 sftp!?;-)),但我在两个示例中都使用相同的内容以保持一致)。

您可能需要更多控制,因此需要捕获返回代码。

ftp user@remoteHost File remote/path
ftp_rc=$?

case ${ftp_rc} in
  0 )  print -- 'sucessfully sent file' ;;
  1 )  print -u2 'error on userID' ; exit ${ftp_rc};;
  2 )  print -u2 -- 'no localFile found' ; exit ${ftp_rc};;
esac

我不确定 1 或 2 的含义,这些只是说明性的。查看您的 man ftp 看看它们是否有记录,或者做一个简单的测试,故意一次向 ftp 发出一个错误,看看它是如何响应的。

如果未使用 std 错误代码或不一致,那么您必须捕获 ftp 输出并检查它以确定状态,就像

ftp user@remotehost file remote/path > /tmp/ftp.tmp.$ 2>&1

case $(< /tmp/ftp.tmp.$ ) in
  sucess )  print -- 'sucessfully sent file' ;;
  bad_user )  print -u2 'error on userID' ; exit 1 ;;
  no_file )  print -u2 -- 'no localFile found'  ; exit 2;;
esac

我希望这会有所帮助。

There are so many ftp-clients AND many of there do not necessarily follow std return conventions that you have to do some simple tests, and then code accordingly.

If you're lucky, your ftp-client does return std exit codes and they are documented via man ftp (You do know about man pages?). In that case, 0 means success and any non-zero indicates some sort of problem, so the very easiest solution is something like

if ftp user@remoteHost File remote/path ; then
    print -- 'sucessfully sent file'
else
    print -u2 -- 'error sending file'
fi

( not quite sure that the ftp user@remoteHost file remoteDir is exactly right, (I don't have access to a client right now and haven't used ftp in years (shouldn't you be using sftp!? ;-) ) but I use the same in both examples to be consistent).

You probably want a little more control, so you need to capture the return code.

ftp user@remoteHost File remote/path
ftp_rc=$?

case ${ftp_rc} in
  0 )  print -- 'sucessfully sent file' ;;
  1 )  print -u2 'error on userID' ; exit ${ftp_rc};;
  2 )  print -u2 -- 'no localFile found' ; exit ${ftp_rc};;
esac

I'm not certain about the meaning of 1 or 2, these are meant to be illustrative only. Look at your man ftp to see if they are documented, OR do a simple test where deliberately give one error at a time to ftp to see how it is responding.

If std error codes are not used or are inconsistent, then you have to capture the ftp output and examine it to determine status, something like

ftp user@remotehost file remote/path > /tmp/ftp.tmp.$ 2>&1

case $(< /tmp/ftp.tmp.$ ) in
  sucess )  print -- 'sucessfully sent file' ;;
  bad_user )  print -u2 'error on userID' ; exit 1 ;;
  no_file )  print -u2 -- 'no localFile found'  ; exit 2;;
esac

I hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文