我正在为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输入参数?感谢
答案 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>