我正在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. 執行shell命令(c)
- 2. 在bash命令中執行
- 3. 如何在C中執行shell命令?
- 4. 執行shell命令
- 5. 命令執行shell
- 6. Shell命令執行
- 7. 如何使用`system()`在父shell環境中執行命令
- 8. 在VBA執行Shell命令
- 9. 可可/ Objective-C Shell命令行執行
- 10. 巢在bash執行命令
- 11. 從命令行執行Django Shell命令
- 12. 循環執行命令,打印和BASH執行
- 13. PHP shell執行命令
- 14. 從ruby執行shell命令
- 15. Nodejs child_process執行shell命令
- 16. RealBasic:執行shell命令
- 17. Groovy執行shell命令
- 18. python:os.system不執行shell命令
- 19. 從Java執行shell命令
- 20. 在shell(bash)中如何在管道中執行多個命令?
- 21. 使用線程執行shell命令C++
- 22. 從bash shell腳本中的glob目錄中的命令行執行命令
- 23. 在Shell中異步執行命令
- 24. 等待shell命令在makefile中執行
- 25. 在shell腳本中執行mailx命令
- 26. 在makefile.am中執行shell命令
- 27. 在Makefile中執行Shell命令規則
- 28. 在bash腳本中執行sed命令
- 29. 在bash中執行生成的命令
- 30. 如何在Kotlin中執行bash命令
我使用這個解決方案,因爲在我的解決方案中,我使用了popen,但只使用了十六進制格式的命令以避免使用de scape字符 – JulianOliveira