从/ dev / tty

时间:2015-10-13 08:27:38

标签: php bash tty

使用/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读取时会这样做?

其他信息: -

  • PHP版本:5.3.3(cli)和5.5.20(cli)
  • 操作系统:Linux(CentOS 6.4和Fedora 19)

1 个答案:

答案 0 :(得分:-1)

php /dev/tty \<?php echo "hi\n"; ?> hi

逃避<工作。我不知道为什么会这样:D可能与bash中的事实有关。