【发布时间】:2016-03-11 13:20:54
【问题描述】:
我启动一个 shell 并运行以下命令:
START "" /B php test.php>nul 2>&1
就本文而言,test.php 包含 1 行:file_put_contents("test", "test");
您希望它会立即创建一个名为 test 的文件,但事实并非如此。 相反,当我输入命令并按回车键时,什么也没有发生。但是,在同一个命令窗口中,如果我再次按下回车键,脚本就会运行。
我已经尝试了 node、python2 和 python3 的等效命令。它们都做同样的事情,尽管 python3 非常奇怪地需要在脚本运行之前按下 2 次回车键。
当使用脚本解释器运行 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 动画,说明了具体发生了什么:
证明该脚本仅在第二次按下返回键时运行。
【问题讨论】:
-
去掉
>nul 2>&1会怎样? -
肯定和
>nul 2>&1有关。我认为第一个>nul没有正确转义 -
不,试过了。尝试自己直接将其输入控制台,您应该会遇到同样的异常行为:START "" /B php test.php>nul 2>&1 won't run on the first return.
-
我已经修改了我的帖子,看起来它对我来说是独一无二的,但仍然没有接近修复它...请帮助我。
-
好的,刚刚意识到问题不是我独有的,而是 Windows 8 和 10 操作系统的问题。完全糊涂了……
标签: php windows shell batch-file command-line