我正在C++中创建一个应用程序,该应用程序可以执行一些命令shell来获取有关系统的信息。当我在我的脚本代码中使用类似[[ "$devname" == "bus/"* ]]&& continue;
的命令时,执行此命令会返回错误,这可能是因为在执行脚本脚本时,环境位于dash
而不是bash
。我试图用#!/usr/bin/env bash
执行该命令,但不起作用。完整的命令是内联硬编码的,我避免使用shell脚本文件。在C++中执行shell命令时强制执行环境bash
0
A
回答
1
如果您有这样的命令,说:
[[ "$devname" == "bus/"* ]] && hostname || echo "no"
您可以运行这样说:
bash -c '[[ "$devname" == "bus/"* ]] && hostname || echo "no"'
所以,如果你只是建立一个包含上述一个字符串,可以使用popen()
或任何运行它。在C++中,你将不得不如果你使用上面的字面逃跑内报价,因此:
const char* command = "bash -c '[[ \"$devname\" == \"bus/\"* ]] && hostname || echo \"no\"'";
2
你有两个选择:
1)明确通过putenv()
设置SHELL
:
putenv("SHELL=/bin/bash");
execl(...);
2)明确执行/bin/bash
,而不是依靠hashbang:
execl("/bin/bash", script.c_str(), NULL);
// script is the script you're trying to execute.
+0
我不认为您的解决方案(1)应该工作。谁应该尊重'SHELL'变量? C++不一定会这样做(标准中没有任何内容会强加它),对于程序加载器也不是特别的。如果要加载的脚本没有sheebang行,则会使用默认shell(通常是'sh')。 – user1934428
相关问题
- 1. 在python中复制shell环境以执行bash命令
- 2. Jenkins执行bash shell命令
- 3. 执行shell命令(c)
- 4. 在WAMP环境中执行php命令
- 5. 在bash命令中执行
- 6. 如何在C中执行shell命令?
- 7. C++在shell中执行许多命令
- 8. 如何使用`system()`在父shell环境中执行命令
- 9. 命令执行shell
- 10. 执行shell命令
- 11. Shell命令执行
- 12. 在VBA执行Shell命令
- 13. 可可/ Objective-C Shell命令行执行
- 14. 巢在bash执行命令
- 15. 从命令行执行Django Shell命令
- 16. 在Java中执行shell命令行
- 17. 使用perl执行shell命令,同时保持shell环境变量
- 18. 循环执行命令,打印和BASH执行
- 19. 如何在执行回显shell命令时执行
- 20. 从python执行shell命令
- 21. Sevlet + Shell命令执行
- 22. 从Java执行shell命令
- 23. RealBasic:执行shell命令
- 24. 执行shell命令org.apache.commons.exec.DefaultExecutor
- 25. Groovy执行shell命令
- 26. 从ruby执行shell命令
- 27. PHP shell执行命令
- 28. python:os.system不执行shell命令
- 29. Nodejs child_process执行shell命令
- 30. 执行交互shell命令
我使用这个解决方案,因为在我的解决方案中,我使用了popen,但只使用了十六进制格式的命令以避免使用de scape字符 – JulianOliveira