为什么 stdout 不是 tty?

问题描述 投票:0回答:1

为什么 stdout 不是 tty,尽管 stderr 是?如果您需要更多上下文,请告诉我,添加此行以通过 stackoverflow 的验证。

$ php -r 'var_dump(exec("test -t 1 && echo y"));'
string(0) ""
$ php -r 'var_dump(system("test -t 1 && echo y"));'
string(0) ""
$ php -r 'var_dump(passthru("test -t 1 && echo y"));'
NULL
$ php -r 'var_dump(exec("test -t 2 && echo y"));'
string(1) "y"
$ php -r 'var_dump(system("test -t 2 && echo y"));'
y
string(1) "y"
$ php -r 'var_dump(passthru("test -t 2 && echo y"));'
y
NULL
$ php -v
PHP 8.2.20 (cli) (built: Jul  4 2024 02:23:40) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.20, Copyright (c) Zend Technologies
$ uname -rsm
FreeBSD 13.3-RELEASE-p1 amd64
php
1个回答
0
投票

所有这些函数都会重定向它们的

stdout
,以便可以以各种方式对其进行处理。

exec()
返回其输出的最后一行,如果给出第二个参数,它将存储该变量中所有行的数组。它通过将标准输出重定向到管道来完成这两个任务。

system()
passthru()
使用管道将输出复制到 PHP 的输出缓冲区。即使 PHP 的输出发送到终端,它也会使用输出缓冲区以方便
ob_XXX()
函数的使用。另外,
system()
返回最后一行输出,这需要通过管道捕获输出。

stderr
默认情况下不重定向。

© www.soinside.com 2019 - 2024. All rights reserved.