如何在Deno.Command的参数中正确传递星号?
在Deno.Command中传递含星号的参数
你遇到的问题核心是:通配符*是由Shell(比如bash)负责解析展开的,而Deno.Command是直接调用cp命令,不会经过Shell处理,所以cp会把source/*当作一个字面量文件名,自然找不到对应的文件。
下面提供两种解决方法:
方法1:通过Shell处理通配符
直接调用Shell(比如bash),把完整命令作为参数传递给Shell,让Shell负责解析通配符:
const output = new Deno.Command("bash", { args: ["-c", "cp source/* destination"] }).outputSync(); console.error(new TextDecoder().decode(output.stderr));
如果是Windows系统,可替换为cmd:
const output = new Deno.Command("cmd", { args: ["/c", "copy source\\* destination"] }).outputSync(); console.error(new TextDecoder().decode(output.stderr));
方法2:在Deno代码中手动展开通配符
使用Deno原生的glob功能(需要--allow-read权限),先匹配所有符合source/*的文件,再把这些路径作为参数传给cp命令:
// 匹配source目录下的所有文件/子目录 const matchedFiles = [...Deno.globSync("source/*")]; // 调用cp命令,传入匹配到的文件和目标目录 const output = new Deno.Command("cp", { args: [...matchedFiles, "destination"] }).outputSync(); console.error(new TextDecoder().decode(output.stderr));
这种方法无需依赖Shell,跨平台兼容性更好,还能更精确地控制要复制的文件范围。
内容的提问来源于stack exchange,提问作者birgersp
相关产品推荐
相关产品推荐

