这个问题在所有扩展被禁用时是否发生?:是的
- VS Code 版本:1.70.2
- OS 版本:Linux x64 5.19.2-1-MANJARO
重现步骤:
- 使用 "process" 任务安装一个扩展,该任务运行来自
PATH
的可执行文件,例如 this minimal extension 运行python
- 在第一个 PATH 条目中创建一个与可执行文件同名的文件夹,例如
~/.local/bin/python
- 尝试执行任务,收到以下错误:
* Executing task: python
execvp(3) failed.: Permission denied
* The terminal process "python" failed to launch (exit code: 1).
* Terminal will be reused by tasks, press any key to close it.
这是因为 findExecutable 函数默认使用的函数不检查某物是文件还是目录,而只检查它是否存在:
vscode/src/vs/platform/terminal/node/terminalEnvironment.ts
第27行 in 68cda09
| | exportasyncfunctionfindExecutable(command: string,cwd?: string,paths?: string[],env: IProcessEnvironment=process.envasIProcessEnvironment,exists: (path: string)=>Promise=pfs.Promises.exists): Promise<string|undefined>{ |
这个问题在 win32.findExecutable 中已经修复,其中在搜索 PATH 时忽略目录。然而,由于这些函数位于不同的文件中,另一个函数错过了这个修复。
理想情况下,这两个函数应该合并,因为它们执行的任务基本相同,这样可以避免将来出现这个问题。也许值得考虑在平台之间保持任务行为一致性,以便在哪个点解析可执行路径方面达成一致,这似乎是我们一开始出现两个实现的原因。
2条答案
按热度按时间xdnvmnnf1#
可能与 #158666 有关。
epfja78i2#
#158666 与此问题有一定关联,但这两个问题分别来自代码的不同部分。这个问题来自于
findExecutable
函数。这个 PR 会稍稍改善这种情况,因为这个错误会被提前捕获到,所以它会显示为:
The terminal process failed to launch: Path to shell executable "python" is not a file or a symlink.
。然而,预期的行为是,如果存在一个有效的可执行文件,那么无论 PATH 中有任何目录,都不应该出现错误。