bash — используя php из командной строки: как перенаправить вывод?

Я новичок в PHP … Обычно я пишу на bash, где я могу легко сделать что-то вроде этого:

#!/bin/bash

# myscript.sh

function testFunction() {
echo "bubu" > /dev/tty
echo "gaga"}
a=$(testFunction)
echo $a > t

Если я запускаю его в оболочке, я получаю это:

$ ./myscript.sh
bubu
$ cat t
gaga

Теперь, как я могу получить тот же вывод, если у меня есть файл PHP вместо функции?

// my script.php
echo "bubu";
echo "gaga";

Bash скрипт:

#!/bin/bash

# myscript.sh

a=$(php myscript.php)
echo $a > t

Если я запускаю его в оболочке, я получаю это:

$ ./myscript.sh
$ cat t
bubu
gaga

Как я могу сказать php скрипт для отправки "bubu" в /dev/tty?

Я пытался поиграть с ob_start и его друзья, но не получили никакого результата.

0

Решение

Вы можете использовать stdout / stderr в PHP, чтобы разделить вывод, смотрите вопрос stackoverflow PHP CLI не использует stderr для вывода ошибок. Это, однако, потребует адаптации всех «бубу» echo заявления в myscript.php что-то вроде:

fwrite(STDERR, "bubu");

Вы бы тогда перенаправили STDERR подать bubu в оболочке Bash, чтобы получить все строки «bubu», в то время как все строки «gaga» появятся на вашем терминале:

php myscript.php 2> bubu
0

Другие решения

$ php script.php > /dev/tty

Это делает трюк 🙂

редактировать/

Я вижу, вы хотите только «Bubu»

Итак, вы должны сделать следующее:

file_put_contents('/dev/tty', 'bubu');
-1