Windows下执行指向PHP CLI的.lnk快捷方式无当前shell输出问题
原因说明
.lnk 是Windows系统专属的Shell快捷方式格式,和类Unix系统的文件系统软链接、硬链接有本质区别,二者执行逻辑完全不同:
- 直接调用
php.exe时,系统会在当前终端会话内直接创建PHP的子进程,自动继承当前shell的标准输入、输出、错误句柄,命令后附带的脚本参数会直接透传给PHP进程,执行结果会直接输出到当前终端窗口。 - 直接在终端调用
.lnk文件时,终端不会直接加载快捷方式指向的exe,而是会调用Windows资源管理器(Shell组件)解析快捷方式启动目标程序:- Shell启动控制台类程序时,默认会为目标进程创建独立的新控制台窗口,不会复用当前终端的窗口和输出句柄
- 跟在
.lnk文件名后传入的参数不会被自动透传给目标程序,Shell只会读取快捷方式属性里预先保存的启动参数 - PHP执行完脚本后进程会立刻退出,对应的新窗口也会同步关闭,就会出现当前终端无输出、新窗口闪一下就消失的现象。
可行解决方案
- 命令行场景不要使用
.lnk做程序别名,优先把PHP安装目录加入系统PATH环境变量,之后任意路径下直接输入php即可调用,行为和直接执行exe完全一致。 - 如果需要在当前目录创建别名,使用文件系统级软链接替代lnk:打开管理员权限的PowerShell,在对应目录执行
New-Item -ItemType SymbolicLink -Path .\php.exe -Target 你的PHP安装目录绝对路径\php.exe,创建的软链接和直接调用原exe行为完全一致,支持参数透传、输出到当前终端。 - 不推荐尝试在命令行直接调用lnk实现等价效果,这类Shell快捷方式本身就是为图形界面资源管理器点击启动设计的,天生不适配命令行交互场景。
内容的提问来源于stack exchange,提问作者yaner
相关产品推荐
相关产品推荐

