Код
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
static string header = "CWUshell";
static int result = 0;
static string input = "S";
int main() {
bool cont = true;
while (cont) {
cout << "<" + header + ">";
cin.clear();
cin.sync();
getline(std::cin, input, '\n');
if (input == "exit") {
cont = false;
} else {
result = system(input.c_str());
if (result != 0) {
cout << "Command " << input << " not recognized" << endl;
}
}
}
return 0;
}
Проблема:
При запуске в моей консоли Eclipse IDE код работает так, как мне хотелось бы to:
<CWUshell>dir
Debug src
<CWUshell>ls
Debug src
<CWUshell>exit
При запуске в контейнере Ubuntu docker я получаю следующий вывод (он продолжается вечно):
<CWUshell><CWUshell><CWUshell><CWUshell><CWUshell><CWUshell><CWUshell><CWUshell><CWUshell>
Я пытался использовать cin.ignore () ( вместо cin.clear () и cin.syn c ()), system («пауза»), system («PAUSE»), system («read») и множество других способов попробовать Если система приостановит прием ввода, но безуспешно, консоль Ubuntu не будет ждать ввода и просто выполнит команду l oop. Как решить эту проблему, как я могу заставить консоль ubuntu 18.04 приостанавливать и ждать ввода пользователя?
Docker Файл сборки
На всякий случай помогает моему docker файлу сборки получить образ ubuntu 18.04, в котором уже есть необходимые инструменты для компиляции и запуска c ++, вставить в него мой файл c ++, затем скомпилировать и выполнить этот файл.
FROM szilardvajda/ubuntu_cs470
MAINTAINER Wyatt Rose
COPY application /application
WORKDIR /application/
RUN g++ -o Application cwushell.cpp
CMD ["./Application"]