【发布时间】:2015-02-04 21:05:10
【问题描述】:
我有一个带有 2 个参数的命令。
当我手动运行命令时,我是这样做的:
cmd -i xyz.dat
hit enter
enter password in the prompt
hit enter
confirm password
我的脚本需要在不期望用户输入密码的情况下进行上述操作。我可以硬编码文件中的密码,但需要一种方法来在我执行 shell 脚本时成功运行此命令。
截至 2 月 7 日, 我期望安装在我的 AIX 上。当我在命令提示符下键入 expect 时,提示符更改为 expect 1.1> OS is 64 bit AIX
我已按照以下评论中提到的说明进行操作,但我不断收到错误 - 无法执行命令;没有这样的文件或目录”?我可以从运行脚本的同一目录手动运行此命令。除此之外,我还给出了命令的完整路径和 文件。
我正在粘贴另一个我尝试使用 root 密码 su 的程序,如下所示:我在运行测试程序时收到相同的错误消息。我怀疑这是否与引号有关。
#!/bin/bash
set timeout 20
spawn "su"
expect "Password:" { send:"temp123\r" }
interact
有人可以帮我解决这个错误吗?
【问题讨论】:
-
如果你得到'没有这样的文件或目录'的错误,这意味着你的系统上没有安装
expect。这并不完全出乎意料(如果你原谅双关语的话)。安装expect同样,AFAICR,需要 Tcl(或者,至少,expect是基于 Tcl/Tk,所以当你安装expect时你最终会使用 Tcl 技术)。但是您很可能可以使用适当的命令安装其他人的预编译版本 - 其详细信息很大程度上取决于您使用的 Unix 品牌,以及如果是 Linux,则使用哪个发行版(不同的发行版有不同的软件安装系统)。 -
我已经安装好了。
-
好的;最好记录下您已安装
expect并能够运行。现在,您正在运行的cmd安装在哪里?它在你的 PATH 上吗? (必须是直接运行它的时候,所以我不认为这是个问题。)您可能需要检查expect的spawn命令是否执行基于路径的搜索。如果没有,我会感到惊讶,但更有趣的事情已经知道(它会解释错误)。 -
有一本
expect5.31 版的手册。spawn上的信息并不特定于“搜索路径”,但我认为假设它是合理的。您提供的平台信息相互矛盾。您说“我希望在我的 linux 上安装……操作系统是 64 位 AIX”。您是在 Linux 还是 AIX(或两者)上运行?您的问题在哪里? -
我之前引用的手册页说:spawn [args] program [args] 创建一个正在运行的新进程program args。 由此,我推断您应该使用:
spawn "cmd" "-i" "xyz.dat",即使其他答案表明并非如此。我怀疑这些引号中的大多数都是可选的。