为什么从管道中执行bash命令报错?
我使用 boost::process 打开一个管道并从 stdout 中获取结果,最后在代码中拼出来的 bash 脚本粘贴到 shell 中是可以执行的,但是为什么在软件中报错呢?
读取的代码如下:
bp::ipstream is;
auto cmdString = fmt::format(R"RRR(bash -c 'echo `env LANG=en_US.UTF-8 {}`')RRR", cmd);
spdlog::debug(fmt::format("执行的命令是: {}", cmdString));
bp::child c(cmdString, bp::std_out > is);
std::vector<std::string> data;
std::string line;
while(c.running() && std::getline(is, line) && !line.empty()) data.push_back(line);
auto result = boost::join(data, "\n");
spdlog::debug("命令的结果为: {}", result);
代码运行的结果如下:
debug: 执行的命令是: bash -c 'echo `env LANG=en_US.UTF-8 getfacl /a/2 | egrep -v "(file:)|(owner: )|(group: )|(mask)" | tr "\n" ";" | sed "s/;;/\n/g" | sed "s/# //g"`'
`env: -c: line 1: unexpected EOF while looking for matching `''
`env: -c: line 2: syntax error: unexpected end of file
debug: 命令的结果为:
也就是说最后拼出来的bash脚本是
bash -c 'echo `env LANG=en_US.UTF-8 getfacl /a/2 | egrep -v "(file:)|(owner: )|(group: )|(mask)" | tr "\n" ";" | sed "s/;;/\n/g" | sed "s/# //g"`'
但是这行代码在 bash 中是可以正常运行的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论