我最近决定开始自学C ++,并认为一个简单的加密项目将是一个很好的起点,因为它涵盖了大部分基础知识(cout,cin,打开文件等)。有没有办法让代码打开一个类似于我从sublime文本编译和运行时打开的终端窗口?
到目前为止,我已经尝试了这个,但它没有改变任何东西。
string cmd = "gnome-terminal-x sh-c 'ls-l; exec bash'";
system(cmd.c_str());
基本上,我希望能够通过单击.exe运行程序,并使终端弹出所有输入和输出。
答案 0 :(得分:2)
您无需编写任何代码,只需配置快捷方式即可在终端中启动程序。这是一个Gnome对话框,显示该选项:
答案 1 :(得分:1)
问题似乎是gnome-terminal
,或者只是我未能给出正确的论据。例如,来自另一个终端的命令行的gnome-terminal -x sh -c 'ls -l ; exec bash'
只会打开一个空的gnome-terminal并向原始终端发出一堆glib警告......(请注意:如果你能给出适用于{的正确命令{1}},请在评论中告诉我或只编辑此段。)
但是,使用gnome-terminal
可以使用xterm
或代码行:
xterm -e sh -c 'ls -l; exec bash'
作为旁注,打开DE的默认x终端窗口的命令是string cmd = "xterm -e sh -c 'ls -l; exec bash'";
,但它经常存在不同终端采用不同参数的实际问题,所以遗憾的是你很可能更好地使用特定终端,如x-terminal-emulator
,并要求安装,或让用户配置使用什么终端,使用什么参数(尽管让用户指定要运行的任何命令也可以是安全风险,如果用户不总是受信任的话。)
逃避时要非常小心。例如,当您测试命令表单命令行,然后将其复制粘贴到C ++字符串文字时,您需要再次为每个xterm
和"
转义C ++。如果您遇到问题,请查看C++11 raw strings。
如果在运行时构造命令字符串,则转义变得非常重要,特别是如果您接受用户输入并将其添加到字符串中。在这种情况下,更好地搜索和使用一些现有的库like GLib,或者非常仔细地清理用户输入(即,只是偏执地拒绝任何带有字符的东西,在某些情况下可能在shell中具有特殊含义)。
如果您实际上在询问,我的程序如何为自己打开一个控制台窗口 ,类似于Windows控制台程序的行为,并重定向它自己的\
,{{ 1}}和stdin
就好像它是从命令行启动的那样,对于同一个二进制文件来说并不是很容易,而且通常不会像在Unix中那样完成。
如果你想要这样的行为,你可以创建一个桌面快捷方式,但更通用的方法是编写一个包装器shell脚本,它在终端中启动你的二进制文件。什么样的脚本完全取决于你想要它的行为:它将如何处理stdio,它将返回或等待程序退出,你希望它如何找到二进制文件,它是如何运行的命令行而不是从GUI等双击