使用 c 进行 Gnome 终端访问

使用 c 进行 Gnome 终端访问

我正在尝试编写一个 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:在函数“main”中:c2.c:9:43:错误:在“ping”之前预期“)”strcpy(command,“gnome-terminal -e'sh -c“ping -c4 google.com”'”);

我该如何解决这个问题?

答案1

您要么必须转义内部双引号:

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

ping或者直接在终端中运行命令,不需要封闭的shell:

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

请注意,这两种变体都会在命令退出后立即关闭终端窗口ping,因为它们都没有启动交互式 shell。


如果您希望终端保持打开状态并能够输入命令,则必须在ping退出后启动交互式 shell。我不知道您为什么选择sh(在 Ubuntu 中指向/bin/dash)而不是具有更多功能的标准 Bash shell,但这并不重要。您可以这样做:

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。有关Bash shell 中read类型的更多信息。help read

sh请注意,这在(Dash)中不起作用,因为read它特定于 Bash。

相关内容