我正在尝试在Linux中编写一个需要执行以下工作的expect脚本。
在步骤1中,我尝试发送一个命令来检查文件是否存在但是它不起作用
foreach($ligne as $value){
$result = $bdd->query('SELECT count(d.DNUMERO) as nbr, SUM(d.DINIPPL) as total FROM dossier d, cliregroup c, doinfsup i WHERE i.DSNUMERO = d.DNUMERO AND d.DNUMCLI = c.NUMCLI AND i.INFOSUPPLM REGEXP "([1][4-6][0-9a-zA-Z]{6}[0-9]{4})" AND INFOSUPPLM NOT REGEXP "([0-1][0-4][0-9a-zA-Z]{6}[0-9]{4})" AND i.DSNUMERO LIKE "16%" AND c.CODEREGROUP LIKE "'.$value.'"');
$table = $result->fetchAll();
print_r($table);
}
<?php include_once('header.html'); ?>
结果总是包含我发送的命令而不是输出FOUND或NOTFOUND。有人能让我知道我在这里做错了吗?
答案 0 :(得分:1)
而不是使用模式匹配,您的脚本会尝试手动处理缓冲区,但会做出错误的假设,即缓冲区只包含文本&#34;(NOT)FOUND&#34;。缓冲区实际上包含自上次使用命令expect
以来收到的所有内容。即使它确实匹配缓冲区(例如,使用string match *NOTFOUND* $result
),它也会受到the echo problem的影响:字符串&#34; FOUND&#34;并且&#34; NOTFOUND&#34;在您发送的命令中,这很可能是由SSH服务器回复给您的。
脚本的以下修改通过不发送它期望的文字字符串来解决回声问题。
它适用于Windows端的Bitvise SSH服务器。
log_user 1
spawn ssh -o "StrictHostKeyChecking=no" $username@$hostname
# Log in here.
send "set prefix=___\r" ;# Combat the echo problem.
send "IF EXIST C:\\path\\to\\file\\temp.zip (echo %prefix%FOUND) else (echo %prefix%NOTFOUND)\r"
expect {
___NOTFOUND {
error {file not found}
}
___FOUND {
send_user Found!\n
# Do things with the file.
}
}