You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Perl反引号无法执行MD命令的问题咨询

问题解答

核心问题解析

  • 能否像CMD.exe那样用反引号调用Windows命令?
    可以,但得明确指定让Perl调用Windows的cmd.exe来执行命令,不能直接写md这类CMD专属命令。
  • 当前是否处于bash环境?
    是的。你安装的x86_64-msys-thread-multi版本Perl是基于Git自带的msys环境构建的,它默认会用msys的sh(类bash的shell)来处理反引号、system()这类系统调用,所以报错里会出现sh: line 1的提示。
  • 是始终处于还是特定情况触发?
    对于这个版本的Perl来说,始终会用msys的shell处理系统命令,除非你手动指定调用cmd.exe或者其他程序。

错误原因说明

  1. 第一个错误Can't exec "md": No such file or directory:
    msys的sh里没有md命令(它用mkdir创建目录),而你的Perl默认把反引号里的命令交给sh执行,所以找不到md。
  2. 第二个错误sh: line 1: md: command not found:
    同样是因为命令被交给msys的sh执行,sh不认识Windows的md命令,直接报错。

解决方法

方法1:用Perl内置的mkdir函数(推荐,跨平台)

完全不需要调用系统命令,直接用Perl自带的函数创建目录,兼容性更好:

perl -e 'use warnings; mkdir $ARGV[0] or die "创建失败: $!";' test12

方法2:显式调用cmd.exe执行Windows命令

如果非要用md这类CMD命令,得让Perl调用cmd /c来执行(/c表示执行完命令后退出CMD):

perl -e 'use warnings; `cmd /c md $ARGV[0]`;' test12

带路径的情况也适用:

perl -e 'use warnings; `cmd /c md $ARGV[0]`;' test12\b4

方法3:用msys环境的mkdir命令替代md

既然你在msys环境里,直接用sh支持的mkdir命令:

perl -e 'use warnings; `mkdir $ARGV[0]`;' test12

内容的提问来源于stack exchange,提问作者Matthias Ronge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:17:39