Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.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在phpcli中那样关闭字符串或抑制错误输出?_Php_Bash_Command Line Interface_Shell Exec_Suppress - Fatal编程技术网

如何像bash在phpcli中那样关闭字符串或抑制错误输出?

如何像bash在phpcli中那样关闭字符串或抑制错误输出?,php,bash,command-line-interface,shell-exec,suppress,Php,Bash,Command Line Interface,Shell Exec,Suppress,如果使用以下代码创建简单的php脚本: shell_exec('"'); 并使用以下工具运行它: php myscript.php 它在我的Mac上的bash中出现以下错误: sh: -c: line 0: unexpected EOF while looking for matching `"' sh: -c: line 1: syntax error: unexpected end of file 我已经尝试了我能想到的一切: ob_start(); @shell_exec('"');

如果使用以下代码创建简单的php脚本:

shell_exec('"');
并使用以下工具运行它:

php myscript.php
它在我的Mac上的bash中出现以下错误:

sh: -c: line 0: unexpected EOF while looking for matching `"'
sh: -c: line 1: syntax error: unexpected end of file
我已经尝试了我能想到的一切:

ob_start();
@shell_exec('"');
ob_end_clean();

@shell_exec('" 2> /dev/null');
但不管我怎么做,我都无法抑制这个信息。问题是,我正在创建一个单元测试,以对通用工具的$argc、$argv和getopt()命令进行压力测试,我需要使用包含诸如“=”等随机字符的各种输入调用数百次脚本

因此,我需要能够抑制错误输出,或者检测不平衡的引号,并在字符串末尾附加一个“或”。我发现这个正则表达式可以检测单引号和双引号字符串:

但是我很难想象如何为一个混合了带引号和不带引号的参数的通用bash命令执行此操作。是否有一个内置命令可以告诉我字符串是否可以接受而不抛出错误?然后我可以尝试添加“'”或“'”,我很确定其中一个会关闭字符串。我现在只关心防止错误消息,因为此时我只是在脚本上抛出随机输入


谢谢!

子shell进程正在将错误消息写入STDERR,该消息是从父PHP进程继承的。在运行shell_exec()之前,您可以在PHP脚本中关闭父进程的STDERR文件句柄


您是否已经尝试了
escapeshellarg
?不清楚您正在尝试做什么,因为“2>/dev/null不是有效的bash命令。对这两个命令都适用:我无法使用escapeshellarg(),因为我正试图向CLI传递一个格式错误的查询,以对getopt()进行压力测试。另外,我将传递的随机命令字符串表示为双引号,我应该更具体一些(这是一个混合了字符的命令)。对于仍在阅读此问题的任何人,我意识到我仍然没有正则表达式或方法来验证传递给shell_exec()的字符串。这使得在后台生成进程变得很困难,因为我事先不知道它们在解析参数时是否会失败,尤其是在关闭STDERR时。php似乎无法将STDERR重定向到变量而不是输出,但我可能错了。也许我给出答案太快了,但这是解决我问题的可行办法。
<?php
fclose (STDERR);
shell_exec('"');