在shell_exec()请求之间保留bash shell函数

时间:2016-01-25 18:41:39

标签: php bash shell

我有一个通过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

1 个答案:

答案 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

.....等