我正在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