我有一个通过CLI运行的PHP脚本。反过来我希望该脚本调用一个bash脚本,但最好是我想分解BASH请求,这样我才能看到正在发生的动作。
我似乎可以设置环境变量,它们似乎存在于shell_exec()函数之间。但即使我有一个源文件,如:
来源./bashes/functions.sh
在源文件中我使用" export -f function-name"要在执行下一行之前导出脚本中的函数,下一行不会看到函数。
ember-cli-highcharts
函数$ output-> writeln是一个辅助函数,只是为了回显返回的结果。但基本上我得到的错误是
$file = file('./bashes/bash_testing.sh',FILE_SKIP_EMPTY_LINES);
//we want to watch this in realtime so write each line seperately to shell.
foreach($file as $command) {
$output->writeln(shell_exec($command));
}
现在被定义为包含的bash_testing.sh shell脚本中的函数。
任何人都知道如何解决这个问题?
以下是./bashes/functions.sh文件的来源:
sh: now: command not found
答案 0 :(得分:1)
有一种方法可以维护单个bash shell,执行命令并处理返回。我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互。在此处获取:https://github.com/merlinthemagic/MTS
我建议不要触发bash脚本,而是触发induvidual命令。这样你就可以处理返回,而不必在bash中构建异常处理。
下载后,您只需使用以下代码:
//get a real bash shell.
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', false);
$return1 = $shell->exeCmd($command1);
//logic to handle the return
$return2 = $shell->exeCmd($command2);
//logic to handle the return
.....等