Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash STDIN只是随机工作[PHP CLI]_Bash_Php - Fatal编程技术网

Bash STDIN只是随机工作[PHP CLI]

Bash STDIN只是随机工作[PHP CLI],bash,php,Bash,Php,这样会更改控制台中文本的颜色。问题在于,尽管它同时接受STDIN和-s参数中的字符串,但偶尔会在结果中忽略STDIN。我只是在将脚本通过管道传输到自身时才注意到这一点(见下文) 上面的bash脚本总是显示“Bob”,但在一系列尝试中只显示几次“Hello”,而不更改脚本的任何部分。据我所知,它是否包括它是非常随机的,没有明显的模式 所以我的问题是,如何防止这种情况发生?读取非阻塞可能还没有数据。另一个选项是,如果输入不是交互式终端,则仅读取STDIN: <?php $args = geto

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

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


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

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

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

Hm,如果输入不是tty,您可以通过非阻塞方式读取STDIN(数据可能还没有),而不是通过阻塞方式读取它:
if(!posix_isatty(STDIN)){$input=file\u get\u contents('php://stdin);}
我没想到这么快就能得到答案。现在很好用,谢谢!好的,我会升级为一个答案。再次感谢,下面是在上下文中应用的答案:
<?php
$args = getopt('s:');
if(!posix_isatty(STDIN)){
        $stdin = file_get_contents('php://stdin');
} else {
        $stdin ='';
}
echo $stdin.' '.$args['s'];