У меня проблема с PHP (cli) при использовании /dev/tty
как файл. Фактический сценарий немного более сложен и не упоминается здесь, чтобы не усложнять вопрос.
Чтобы запустить код PHP из STDIN, я могу выполнить команду следующим образом:
$ php
<?php
echo "hello world\n";
?>
<CTRL-D>
hello world
$
Тем не менее, когда пробегать /dev/tty
происходит следующее,
$ php /dev/tty
<?php
echo "hello world\n";
?>
<CTRL-D>
?php
echo "hello world\n";
?>
$
НОТА: Первый персонаж <
просто теряется и php обрабатывает ввод как обычный текст. Мы можем упростить тест до следующего,
За работой
$ php
abcd
abcd
$
Не работает
$ php /dev/tty
abcd
bcd
$
Я бегал strace
чтобы проверить, правильно ли php читает ввод, и похоже, что это так, как показано ниже,
$ strace -o /tmp/1 php /dev/tty ; grep "bcd" /tmp/1
abcd
<CTRL-D>
bcd
read(4, "abcd\n", 4096) = 5
write(1, "bcd\n", 4) = 4
$
Это кажется довольно простым, и я чувствую, что мне здесь чего-то не хватает.
Кто-нибудь знает, почему PHP (cli) ведет себя так при чтении из / dev / tty?
Дополнительная информация:-
php /dev/tty
\<?php
echo "hi\n";
?>
hi
Спасаясь <
работал. Я не знаю почему, хотя: D Вероятно, связано с тем, что это работает в Bash.
Других решений пока нет …