STDIN只随机工作[PHP CLI]


STDIN is only working randomly [PHP CLI]

所以我有这个脚本来改变控制台中文本的颜色。问题是,尽管它同时接受来自STDIN和-s参数的字符串,但它偶尔会在结果中忽略STDIN。我只是在将脚本管道到自身时才注意到这一点(见下文)

php color.php -s Hello, -c green -S underline | php color.php -s " Bob" -c red -S bold

上面的bash脚本总是显示"Bob",但在一系列尝试中只显示几次"Hello",而不改变脚本的任何部分。据我所知,它是否包含它是非常随机的,没有明显的模式。

所以我的问题是,我如何预防这种情况?

读取非阻塞可能还没有数据。另一个选项是仅在输入不是交互式终端时读取STDIN:

<?php
$args = getopt('s:');
if(!posix_isatty(STDIN)){
        $stdin = file_get_contents('php://stdin');
} else {
        $stdin ='';
}
echo $stdin.' '.$args['s'];