Доступ к терминалу Gnome с помощью in c [closed]

I'» m пытается написать программу на C для открытия отдельного терминала и ping google.com

#include<stdio.h>
#include <string.h>

int main()
{
char command[50];
strcpy(command,"gnome-terminal -e 'sh -c "ping -c4 google.com"'");
system(command);

return (0);
}

Но он показывает только такое сообщение об ошибке

c2.c: In function 'main': c2.c: 9 : 43: error: expected ')' перед 'ping' strcpy (command, "gnome-terminal -e 'sh -c" ping -c4 google.com "'");

Как я могу решить эту проблему?

0
задан 23 September 2016 в 09:54

1 ответ

Вы должны были бы либо избежать внутренних двойных кавычек:

strcpy(command, "gnome-terminal -e 'sh -c \"ping -c4 google.com\"'");

или напрямую запустить команду ping в терминале без оболочки:

strcpy(command, "gnome-terminal -e 'ping -c4 google.com'");

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


Если вы хотите, чтобы терминал оставался открытым и мог вводить команды, вы должны запустить интерактивную оболочку после выхода из ping. Я не знаю, почему вы выбираете sh (что указывает на /bin/dash в Ubuntu) вместо стандартной оболочки Bash с большим количеством функций, но это не имеет значения. Вот как вы могли бы это сделать:

strcpy(command, "gnome-terminal -e 'sh -c \"ping -c4 google.com ; sh\"'");

Если вы просто хотите, чтобы окно оставалось открытым до тех пор, пока оно не получит нажатие клавиши (не позволит ввести команду, но закроется сразу после нажатия любой клавиши), вы бы запустили команду read Bash после вашего ping, например например:

strcpy(command, "gnome-terminal -e 'bash -c \"ping -c4 google.com ; read -s -n1\"'");

Это подавляет ввод введенного ключа в терминале и возвращает после первого введенного символа, не ожидая нажатия клавиши Enter . Для получения дополнительной информации о типе read help read в оболочке Bash.

Обратите внимание, что это не работает в sh (Dash), потому что read относится только к Bash.

7
ответ дан 28 September 2019 в 13:58

Другие вопросы по тегам:

Похожие вопросы: