![写入交互式提示](https://linux22.com/image/56729/%E5%86%99%E5%85%A5%E4%BA%A4%E4%BA%92%E5%BC%8F%E6%8F%90%E7%A4%BA.png)
我正在使用ftp
命令行工具,并且希望将脚本输入与用户输入结合起来。仅当用户输入时,提示符如下所示:
ftp>
但是当我尝试用脚本插入一些输入时,比如
{echo "user username passwd"; cat;} | ftp -n server.tld
我如何强制ftp
(或任何 cli)仍然使用交互模式?
我更喜欢基于标准 shell 工具的解决方案。
答案1
有一个与交互式命令行工具交互的程序,与ftp
示例完全相同:expect
。它是一个专门的脚本外壳,扩展了脚本语言tcl
。
它非常强大,但您可能会在没有了解它的所有内容的情况下就逃脱。一个非常有用的工具是autoexpect
,它可以将交互式会话记录为期望脚本。录制的脚本当然有助于理解基础知识。
脚本expect
可以与交互式程序(例如ftp
.这可以与用户和交互式程序的交互相结合。使用脚本interact
中的命令expect
,可以暂时将控制权交给用户。
当用户拥有控制权时,脚本仍然侦听事件以收回控制权,因此实际上,用户和脚本都在与程序同时交互。