【发布时间】:2020-12-10 17:04:26
【问题描述】:
我目前有一些来自 shell_exec 的奇怪行为,我无法完全弄清楚。
这是我的代码:
$cmd = ('sshpass -p PASSWORD scp -o StrictHostKeyChecking=no ../../UpdateFiles/' . $FILENAME . ' root@' . $IP . '://media/sdcard');
$output = shell_exec($cmd);
if (empty($output)){
$cmd = ('sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no root@' . $IP . ' /sbin/start_sw_upgrade_process sdcard /media/sdcard ' . $FILENAME);
$output = shell_exec($cmd);
if (empty($output)){ $output = "No return from update command"; }
}
printf("%s",$output);
因此,第一个命令按预期工作,只有在成功时才返回任何内容。这可以很容易地验证,文件现在在 sd 卡中。
文件传输到其他设备后,应该执行下一个命令。 此命令应该启动一个应该开始使用该文件的工具。因为我只是使用一个虚拟文件,它应该返回并出错。
但是,当我执行此代码时,会返回一个空字符串,因为它只是打印“No return from update command”
但是,如果我在与php文件相同的目录下手动执行命令(手动填写变量ofc),则会返回错误。
是否正在执行命令但没有返回任何内容,或者命令根本没有执行,我不太确定。
但我在其他地方也使用类似的命令,例如:
$cmd = ('sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no root@' . $IP . ' df | grep sdcard');
$output = shell_exec($cmd);
在这种情况下,它会按预期工作。所以我不太明白为什么在这种情况下没有。
这是一些愚蠢的明显错误吗?
我最近更改了它,所以它不是打印“更新命令不返回”,而是打印刚刚执行的命令。 当我复制该命令并在完全相同的情况下执行它时,我得到一个输出。 为什么只能手动操作?
【问题讨论】: