如何在不同的终端中复制和运行命令

How to copy and run command in different terminal

本文关键字:复制 运行 命令 终端      更新时间:2023-10-16

我有一个简单的程序,例如在C++中

#include<iostream>
using namespace std;
int main()
{
    int a, b, c;
    cin >> a >> b;
    c = a + b;
    cout << c;
}

在这里,我需要在执行时给出ab作为输入。

我需要写一个脚本,将a(比如5(和b(比如7(的值自动键入到第一个终端中。

我认为您必须更改一些内容才能做到这一点,因为您希望传递脚本中的参数。C++程序main.cpp:

 #include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc,char *argv[])
{
  if(argc==1)
   {
    exit(1);
   }
  int a=atoi(argv[1]);
   int b=atoi(argv[2]);
  cout<<a+b<<endl;
return 0;
}

shell脚本将是:

 #!/bin/bash
    g++ temp.cpp -o out
    a=5
    b=2
    ./out "${a}" "${b}"

您应该在这里看到传递变量的信息。另请参阅

与其尝试编写一个与多个终端交互或与管道一起工作的程序(这可能会更复杂(,我建议通过让它处理命令行参数来简化程序。您可以按照如下方式重新编写您的C++程序:

#include <iostream>
#include <cstdlib>    // for atoi function
using namespace std;
int main(int argc, char* argv[])  // to accept CLI inputs
{
    // argv[0] has path/name to this program
    // argv[1] has 1st argument, if provided
    // argv[2] has 2nd argument, if provided
    // if argc != 3, then we don't have everything we expected, and we bail
    if(argc != 3) {
        cerr << "usage: " << argv[0] << " arg1 arg2" << endl;
        return -1;
    }
    // for simplicity, we assume that you won't get letters, only numbers
    int a = atoi(argv[1]);
    int b = atoi(argv[2]);
    cout << (a + b);
    return 0;
}

然后,您可以编写一个简单的shell脚本,用您想要的任何参数启动程序。例如,如果您构建的程序名为test(使用g++ -o test test.cpp进行构建(,那么您可以使用以下示例launcher.bash脚本:

#!/bin/bash
for i in {0..10}
do
    ./test $i $i
    echo
done

脚本产生以下输出:

/tmp ❯ ./launcher.bash
0
2
4
6
8
10
12
14
16
18
20

如果可执行文件是a.out,则可以使用

a=5;b=7;echo $a $b | ./a.out

顺便说一句,在您的示例中,缺少cout/cin命名空间(例如,在#include之后添加using namespace std;(。

相关文章: