【问题标题】:open a terminal and executing a command in the opened terminal using c language使用c语言打开终端并在打开的终端中执行命令
【发布时间】:2014-08-02 11:55:27
【问题描述】:

我想打开一个新终端并在该打开的终端中运行 ssh 会话。我正在使用的代码是

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

void main()
{
    char cmd[50];
    strcpy(cmd,"gnome-terminal");
    system(cmd);
    strcpy(cmd,"ssh 172.27.23.143");
    system(cmd);
}

但它不起作用。请帮忙

【问题讨论】:

  • popen() 似乎非常适合您的目的。参考:man popen
  • 您遇到的错误是什么?
  • 没有错误,但在关闭后仅因第一个命令而打开的终端第二个命令正在执行,但我希望在同一个终端中执行一堆命令

标签: c linux terminal


【解决方案1】:

对于您想要执行的操作,您应该使用以下格式的命令:

void main()
{
    char cmd[50];
    strcpy(cmd,"gnome-terminal -e \"ssh 172.27.23.143\"");
    system(cmd);
    return;
}

要在命令完成时使新终端保持打开状态: 在gnome-terminal

  • 转到编辑 -> 个人资料偏好 -> 标题
  • 单击“命令”选项卡。
  • 从标记为When command exits 的下拉菜单中选择Hold the terminal
  • 您应该为此创建一个新配置文件并使用
    gnome-terminal --window-with-profile=MYPROFILE -e mycommand 执行

编辑: 要链接多个命令,请使用:

strcpy(cmd,"gnome-terminal -e \"ssh 172.27.23.143 &amp;&amp; command1 &amp;&amp; command2 &amp;&amp; commandN\"");

在 shell 中,我们使用 &amp;&amp; 运算符链接命令。

【讨论】:

  • 如果我想在同一个终端上执行另一个命令怎么办
  • 为什么你们都使用strcpy作为常量字符串?
  • @C.R.当然,代码可以简单地写成char cmd[50] = "gnome-terminal -e \"ssh 172.27.23.143\"";,但我更喜欢与OP的代码保持相似,尽可能专注于回答真正的问题。
最近更新 更多