あなたが実行しているのは
echo 'hello' > /dev/pts/2 | /usr/bin/at 19:36
意味
echo 'hello' > /dev/pts/2
stdout を にパイプし/usr/bin/at 19:36
ますが、すでにエコーを にリダイレクトしているため/dev/pts/2
、これは空になります。おそらくあなたが意図したことは次のとおりです。
echo system("echo 'echo hello > /dev/pts/2' | /usr/bin/at 19:36");
shell_exec
シェルを介してコマンドを渡すために使用することもproc_open
、実行しているコマンドの stdin/out/err をより適切に制御できるようにするために使用することもできます。あなたの例は(php.net docsからの適応例)に対応します:
<?php
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a pipe that the child will write to
);
$process = proc_open('/usr/bin/at', $descriptorspec, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], 'echo "hello" > /dev/pts/2');
fclose($pipes[0]);
$stdout = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);
$return_value = proc_close($process);
echo "command returned $return_value. stdout: $stdout, stderr: $stderr\n";
} else {
echo "Process failed";
}
?>