使用/dev/tty
作为文件时,我遇到了PHP(cli)的问题。实际情况稍微复杂一些,这里没有提到这个问题。
要从STDIN运行PHP代码,我可以按如下方式运行命令,
$ 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读取时会这样做?
其他信息: -
答案 0 :(得分:-1)
php /dev/tty
\<?php
echo "hi\n";
?>
hi
逃避<
工作。我不知道为什么会这样:D可能与bash中的事实有关。