Как открыть окно терминала с C ++ в Ubuntu?

0

Недавно я решил начать учить себя C++ и думал, что простой проект шифрования будет хорошим началом, поскольку он охватывает большинство основ (cout, cin, файлы открытия и т.д.). Есть ли способ, чтобы код открыл окно терминала, подобное тому, которое было открыто при компиляции и запуске из возвышенного текста?

Я пробовал это до сих пор, но ничего не изменил.

    string cmd = "gnome-terminal-x sh-c 'ls-l; exec bash'";
    system(cmd.c_str());

По сути, я хотел бы иметь возможность запускать программу, нажав на.exe, и иметь терминал, где всплывают все входные и выходные данные.

  • 1
    «и подумал, что простой проект шифрования будет хорошим началом». Как раз о самом худшем из возможных.
  • 1
    «Есть ли способ заставить код открыть окно терминала, подобное тому, которое открывается при компиляции и запуске из возвышенного текста?» Мы просто не делаем этого. Вы хотите разрабатывать программное обеспечение? Откройте терминал. Не закрывай это. Это ваш хлеб, масло, ваша питьевая вода, ваш воздух для дыхания, что угодно. Введите все свои команды там. Забудьте, что у вас есть «рабочий стол», кроме случаев, когда вам нужно открыть больше терминалов.
Показать ещё 6 комментариев
Теги:

2 ответа

2
Лучший ответ

Вам не нужно писать какой-либо код, вам просто нужно настроить ярлык для запуска программы в терминале. Здесь диалог Gnome, который показывает эту опцию:

Изображение 174551

  • 1
    Как это помогает OP изучать C ++?
  • 0
    @hyde: он помогает пользователю вернуться к проблеме, решив поставленную задачу.
Показать ещё 4 комментария
1

Проблема кажется gnome-terminal, или просто моя неудача дать ему правильные аргументы. Например, gnome-terminal -x sh -c 'ls -l; exec bash' gnome-terminal -x sh -c 'ls -l; exec bash' из командной строки в другом терминале просто открывает пустой терминал gnome и выдает кучу предупреждений glib на исходный терминал... (Примечание для читателей: если вы можете дать правильную команду, которая работает на gnome-terminal, пожалуйста, дайте мне знать в комментариях или просто отредактируйте этот параграф.)

Однако использование xterm работает, например, xterm -e sh -c 'ls -l; exec bash' xterm -e sh -c 'ls -l; exec bash' или строка для вашего кода:

string cmd = "xterm -e sh -c 'ls -l; exec bash'";

В качестве побочного примечания, команда открытия x-терминального окна по умолчанию для DE является x-terminal-emulator, но довольно часто имеет практическую проблему с различными терминалами, использующими разные аргументы, так что, к сожалению, вы, вероятно, лучше используете конкретный терминал, такой как xterm, и требующий установки или позволяющий пользователю настроить какой терминал использовать, с какими аргументами (хотя позволяя пользователю указывать любую команду для запуска, также может быть угрозой безопасности, если пользователь не всегда доверял).


Просто будьте очень осторожны с побегом. Например, при тестировании в командной строке команду формы, а затем скопировать и вставить его в C++ строка символов, вам нужно бежать каждый " и \ еще один раз для C++. Если у вас есть проблемы с этим, проверить C++ 11 необработанных строк.

Escaping становится особенно важным, если вы строит командную строку во время выполнения, и особенно если вы принимаете ввод пользователя и добавляете его в строку. В этом случае лучше искать и использовать какую-либо существующую библиотеку, например GLib, или очень тщательно деактивировать ввод пользователя (т.е. Просто параноидально отклонять что-либо с символами, что может иметь особое значение в оболочке в некотором контексте).


Если вы действительно спрашиваете, как моя программа может открыть консольное окно для себя аналогично тому, как ведут себя консольные программы Windows, и перенаправить его собственные stdin, stdout и stderr там, как если бы он был запущен из командной строки, это не очень просто из одного и того же двоичного файла, и обычно это не делается в Unix.

Если вы хотите подобное поведение, вы можете создать ярлык на рабочем столе, но более общим способом является создание сценария оболочки оболочки, который запускает ваш двоичный файл в терминале. Какой именно сценарий точно зависит от того, как вы хотите, чтобы он вел себя точно: что он будет делать с stdio, вернется ли он или ждет выхода программы, как вы хотите, чтобы он нашел двоичный файл, как он себя ведет при запуске вместо двойной -c лизать из графического интерфейса и т.д.

  • 0
    TS на самом деле не хочет запускать ls из своей программы. Он хочет, чтобы стандартный ввод и вывод его собственной программы шел на недавно открытый терминал. Он пытается использовать sh и ls и прочее не потому, что они ему действительно нужны, а потому, что он не знает, что использовать.
  • 0
    Немного неясно, чего на самом деле хочет ОП. Этот ответ отвечает на буквальный вопрос названия и текста. Вопрос может быть лучше закрыть до выяснения, хотя ...
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню