我启动一个shell,然后运行以下命令:
START "" /B php test.php>nul 2>&1
就本文而言,test.php由1行组成:file_put_contents(“test”,“test”);
你希望它立即创建一个名为test的文件,但事实并非如此。 相反,当我输入命令并按Enter键时,没有任何反应。但是,在同一个命令窗口中,如果我再次按下回车键,脚本将会运行。
我尝试过与node,python2和python3等效的命令。它们都做同样的事情,虽然python3足够需要在运行脚本之前按两次回车键。
使用脚本解释器运行START / B时,这似乎是一个怪癖。如果我使用.exe或.bat运行START / B,那么它会按预期运行。
现在,显然我不需要运行创建名为'test'的文件的后台进程。我需要它做的是启动一个用php编写的守护进程和一个用nodejs编写的守护进程,一个接一个地放在同一个终端中。
我还注意到,如果我将这些命令写入批处理文件并通过双击批处理文件而不是从shell调用它来运行它们,那么它将按预期运行。
请帮忙。我已经和这个问题摔跤了2天了。
编辑:
我刚刚发现这个问题对我的电脑来说是独一无二的,在Windows 10上运行。我在Windows 7和Windows XP上试过,他们不需要额外的返回输入来运行脚本......
我刚尝试在安全模式下启动并清除路径变量。它仍然存在。 我想知道这是否是Windows 10的错误/功能? 我该怎么诊断和解决这个问题?
编辑2:
刚刚在Windows 8计算机上测试了相同的脚本,这意外地完成了我的Windows 10计算机所做的事情。所以看起来只有Windows 8和Windows 10才有这个问题......并且使用传统模式没有任何区别。 什么是FFFFFFFFFnnngggghhhrrr ...我找不到任何人在任何地方报告这个问题。
这是一个确切发生了什么的gif动画:
证明脚本仅在第二个返回键上运行。
答案 0 :(得分:1)
您可以尝试<NUL
向该命令发送额外的 Enter 。
start "" /b php test.php <NUL
Re:为什么发生了这种情况,对不起,我无法回答这一部分。错误?安全?未记载的功能? *耸肩*
答案 1 :(得分:0)
start /b
启动另一个进程,该进程与原始Windows共享输入和输出。 (要验证执行start /b "" prompt $G
并反复按Return键)
最好在另一个Windows中启动辅助进程(无/b
- 使用/min
代替最小化运行它)。您还应该给它一个Exit
,否则它会保持打开状态:
start /min "" echo hello^>hello.txt^&Exit
注意:如果您不想转发>
,&
,|
,...之类的特殊字符,它们将由&#34; start&#34处理; - 换句话说,在原始环境中,而不是在新开始的过程中。
答案 2 :(得分:0)
我在这里看不到任何问题 也许您已经通过一些测试损坏了cmd.exe 对于测试,我打开了一个新的cmd窗口
我用
进行了测试<?php
echo "Hello";
?>
和
start "myTitle" /b php test.php
答案 3 :(得分:0)
我遇到了非常类似的问题,在试图找到答案时偶然发现了这个问题。
在我的情况下,我试图使用&#39; popen&#39;从PHP运行Windows命令 我最近从8升级了Wampserver和Windows 10 我的代码在升级之前工作,随后超时 我在命令行上也发现了同样的问题 - 必须输入换行符才能接收输出。
我的解决方案有两个方面:
1.在命令行中,我发现添加&#39; /等等。开关固定了。
2. PHP使用的shell具有与cmd shell不同的PATH。我的php.exe路径定义了两次,我的旧版Wampserver有一个旧条目。所以我删除了它。注意我必须重新启动PC才能正确更新路径。