linux - 在 bash 脚本中自动向 ftp 提供命令

标签 linux bash shell ftp

我正在尝试使用 ftp 创建一个 bash 脚本。

如果我使用终端并将命令一个接一个地放在下面,它就像一个魅力。

$ ftp 192.168.1.4 2121
Connected to 192.168.1.4.
220 SwiFTP 1.7.11 ready
Name (192.168.1.4:user): 
331 Send password
Password:
230 Access granted
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> cd Study/Math
ftp> put ~/Documents/Math/lesson.pdf lesson.pdf

我正在尝试使用 bash 脚本自动执行此命令:

#!/bin/bash
ftp 192.168.1.4 2121
cd Study/Math
put ~/Documents/Math/lesson.pdf lesson.pdf

它不起作用。我知道 ftp 是一个独立的工具,我必须在 ftp 程序运行时输入这些命令。我在互联网上搜索并尝试了各种技术(如 printfexpect 等...),但没有奏效。我还尝试使用互联网上的一些脚本来自动执行此过程,但没有任何帮助。我是 bash 脚本和这些东西的新手。你们能帮我解决这个问题吗? 提前致谢...

最佳答案

首先,如果您有任何其他选择,请不要这样做。这是一个相当标准的习语,但它在很多方面确实有问题。如果您非常确定它永远不会做任何不可预测的事情,并且当它发生时无论如何都会没问题,那么当然可以,但总的来说......

  1. 使用 ftp 以外的东西。例如,scp 工作得很好并且有一个实际有用的可检查返回码。

  2. 使用更精细的模块编程语言。别误会我的意思,我喜欢 bash 并且总是会在可能的时候首先使用它,但是将命令流泵入 ftp 就像发射后不管的 UDP 鱼雷一样,而没有任何简单的方法来检查每个命令是否正常工作是很糟糕的习惯。试试 Perl、Python 或任何其他可让您检查每个命令的返回码并做出相应 react 的该死的东西。 :)

  3. 如果您必须使用 bash(是的,我已经做到了),并且如果它重要到足以检查(什么不是?),那么请考虑您将如何做到这一点。也许您可以将 lesson.pdf 拉回到本地 testme.pdf 并 cmp 它们以确保它是好的,这看起来很容易。对于任何更复杂的脚本,您可能需要将 ftp 作为协进程运行并一次提供一个命令,然后读回它的输出并解析返回代码,因为 ftp 通常只在那里报告错误......并注意“已发送 500 个字节”,这不是 500 错误。

无论如何,祝你好运。在许多方面,简单仍然是最好的。

关于linux - 在 bash 脚本中自动向 ftp 提供命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52945672/

相关文章:

c - 子进程如何打印其根父 ID

linux - 如何使用 Perl 打印到文本文件?

linux - 如何使用 Xlib 设置 "arrow+watch"鼠标光标?

linux - sed 在多个空格的情况下搜索和替换

bash - 访问多命令内联别名/命令中的位置参数

c - TCP多客户端服务器程序

linux - 在 BASH 中处理字符串并计算看到的子字符串的数量

linux - 如何让终端建议自定义命令的选项?

shell - 将两个文件与第一列进行比较,并从 shell 脚本中的第二个文件中删除重复行

winforms - 具有系统窗口表单对象的PowerShell如何显示命令 Pane 或确认框