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