在程序和输入参数中运行shell脚本

时间:2013-07-24 03:49:48

标签: shell

我正在为MAC OSX编写一个C ++程序,我有一个第三个奇偶校验程序“parse”,用​​于将一些.js上传到他们的服务器。在终端中只有几条cmd线。

>parse new [folder]
Login>[email]
Pw>[pw]
projectID>[pid]

我想要自动。这个过程在我的程序中,但我不知道如何打包所有cmd togather。

当我致电system("parse new [folder] && [email] && [pw] && [pid]");

此过程在Login>

处保留

然后我致电system("parse new [folder] && wait && [email] && wait && [pw] && wait && [pid]");

它仍然保持在Login>

我想问一下如何为cmd输入参数?感谢

2 个答案:

答案 0 :(得分:1)

我不记得该命令的确切内容,但它存在!

现在,我找到了它。 expect命令将等待您所描述的提示,然后它会伪装成键盘并输入数据。一个简单的例子:

#!/usr/bin/expect


set timeout 20

spawn "./parse"

FOLDER="/x/y/z"
LOGIN="Randy"
PASSWORD="horse_stapler"
PROJECTID="136729"


expect "parse new " { send "$FOLDER" }
expect "Login>" { send "$LOGIN" }
expect "Pw>" { send "$PASSWORD" }
expect "projectID>" { send "$PROJECTID" }

interact

...更多这样的例子here

但等待。

您需要知道两件事。

首先,脚本顶部是“#!/ usr / bin / expect”的原因是因为这不是bash。相反,这是它自己特殊的脚本。点击链接阅读更多内容。

这非常重要。我不打算这样做,但从来没有,在程序中将密码作为纯文本存储。不要将此程序提供给使用纯文本密码的人,因为这是一个巨大的安全漏洞。

答案 1 :(得分:0)

parse程序似乎是从标准输入读取的。如果这是正确的,您需要确保在单独的输入行上给出电子邮件,目录和项目ID。

测试这是否适用于简单的shell脚本:

parse new [folder] <<EOF
[email]
[pw]
[pid]
EOF

如果有效,那么您需要在传递给system()的字符串中使用多行格式化相同的命令。

如果它不起作用,则表明parse程序正在读取标准输入之外的其他内容;它可能是/dev/tty或其他东西。我会仔细研究它对strace或类似程序的作用,看看它实际上是在调用它。

使用&&等的代码无效;运行parse命令,如果成功,则运行程序[email],如果有一些错误可行,则运行[pw][pid]。< / p>

相关问题