【发布时间】:2016-01-25 18:41:38
【问题描述】:
我有一个通过 CLI 运行的 PHP 脚本。反过来,我希望该脚本调用 bash 脚本,但最好我想分解 BASH 请求,以便我可以看到正在发生的操作。
我似乎可以设置环境变量,它们似乎存在于 shell_exec() 函数之间。但即使我有这样的源文件:
来源./bashes/functions.sh
并且在源文件中我使用“export -f function-name”在执行下一行之前将脚本中的函数导出,下一行看不到函数。
$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));
}
$output->writeln 函数是一个辅助函数,用于回显返回的结果。但基本上我得到的错误是
sh: now: command not found
现在被定义为包含的 bash_testing.sh shell 脚本中的一个函数。
有人知道我该如何解决这个问题吗?
这是 ./bashes/functions.sh 文件的来源:
function now {
date -u +%T
}
export -fx now
【问题讨论】:
-
这行不通,因为进程无法修改其父环境。您只能将变量导出给您的孩子。你真正想做的是什么?我不明白这将如何帮助您“看到行动”
-
这真是太糟糕了。似乎很奇怪,每个 shell_exec() 的环境都必须改变,太糟糕了,没有办法在另一个 shell 脚本中将它们全部保持在同一范围内。您认为这是所有非 bash 环境的问题吗?就像 Python 会出现同样的问题一样。
-
绝对。甚至 php :)
-
您可以创建一个 bash 进程并写入其标准输入。但这不太可能真正解决您的真正问题,尽管我不知道您实际上想要完成什么。
-
这实际上是我所需要的,但我希望看到一个示例,您还可以在 shell 执行某些操作时将多个命令发送到标准输入,这样一切都保持在范围内。执行 popen() 示例,这是这里第一个接受的答案,现在对我有用:stackoverflow.com/questions/20107147/…