我正在尝试编写一个 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。