82 lines
1.8 KiB
PHP
82 lines
1.8 KiB
PHP
|
<?php
|
||
|
namespace nur\b\proc;
|
||
|
|
||
|
use nur\A;
|
||
|
use nur\shell;
|
||
|
|
||
|
/**
|
||
|
* Class CmdPipe: une suite de commandes qui doivent s'exécuter avec les sorties
|
||
|
* des unes connectées aux entrées des autres
|
||
|
*/
|
||
|
class CmdPipe extends AbstractCmd {
|
||
|
/** @var string|null */
|
||
|
private $input;
|
||
|
/** @var string|null */
|
||
|
private $output;
|
||
|
|
||
|
function __construct(?array $cmds=null, ?string $input=null, ?string $output=null) {
|
||
|
parent::__construct();
|
||
|
if ($cmds !== null) {
|
||
|
foreach ($cmds as $command) {
|
||
|
$this->add($command);
|
||
|
}
|
||
|
}
|
||
|
if ($input !== null) $this->setInput($input);
|
||
|
if ($output !== null) $this->setOutput($output);
|
||
|
}
|
||
|
|
||
|
function addLiteral($cmd): self {
|
||
|
A::append_nn($this->cmds, $cmd);
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
function add($cmd): self {
|
||
|
if ($cmd !== null) {
|
||
|
if (!($cmd instanceof ICmd)) {
|
||
|
shell::fix_cmd($cmd);
|
||
|
}
|
||
|
$this->cmds[] = $cmd;
|
||
|
}
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
function setInput(?string $input=null): self {
|
||
|
$this->input = $input;
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
function setOutput(?string $output=null): self {
|
||
|
$this->output = $output;
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
function getCmd(?string $sep=null): string {
|
||
|
if ($sep === null) $sep = "\n";
|
||
|
|
||
|
$actualCmd = [];
|
||
|
A::append_nn($actualCmd, $this->getVars($sep));
|
||
|
|
||
|
$parts = [];
|
||
|
foreach ($this->cmds as $cmd) {
|
||
|
if ($cmd instanceof ICmd) {
|
||
|
$cmd = "(".$cmd->getCmd($sep).")";
|
||
|
}
|
||
|
$parts[] = $cmd;
|
||
|
}
|
||
|
$cmd = implode(" | ", $parts);
|
||
|
|
||
|
$input = $this->input;
|
||
|
$output = $this->output;
|
||
|
if ($input !== null || $output !== null) {
|
||
|
$parts = [];
|
||
|
if ($input !== null) $parts[] = "<".escapeshellarg($input);
|
||
|
$parts[] = $cmd;
|
||
|
if ($output !== null) $parts[] = ">".escapeshellarg($output);
|
||
|
$cmd = implode(" ", $parts);
|
||
|
}
|
||
|
A::append($actualCmd, $cmd);
|
||
|
|
||
|
return implode($sep, $actualCmd);
|
||
|
}
|
||
|
}
|