是批处理文件,不像shell脚本那样可执行

are batch files NOT executable unlike shell scripts?

本文关键字:可执行 脚本 shell 批处理文件 不像      更新时间:2023-10-16

我使用boost.process运行具有某些给定输入的外部进程。用户可以指定外部进程。所以大多数时候用户指定一个shell脚本或批处理脚本。

我只是在做boost::process::launch(_script, arguments, context);,它既可以运行真正的可执行文件,也可以运行shell脚本,只要它们是可执行的(+x)。但是当我在windows中运行它时。它不工作,如果我在_script传递批处理文件,但它工作,如果我指定一个真正的可执行文件。

这让我认为,在Windows批处理脚本不是可执行的吗?它们只是通过cmd.exe进行解释!

我可以启动cmd.exe并将/c _script argv指定为命令行参数。但这不是跨平台的。

和我不想让system()调用,因为我将无法完全控制创建的进程?

没错,批处理文件不能直接执行,需要命令处理程序来运行。

也就是说,解决可移植性问题应该相当简单,可以在编译时(通过预处理器宏)或运行时(特定于windows的环境变量??)

我可能会选择前者,因为前者更健壮。