【问题标题】:Using a script to run a program which run several commands within the program使用脚本运行程序,该程序在程序中运行多个命令
【发布时间】:2016-01-07 18:14:10
【问题描述】:

我有一个 C 程序,我编译它来生成一个可执行文件。我想制作一个启动 C 程序的脚本,运行脚本包含的几个命令并最终退出脚本。 C 程序需要其输入(命令)作为用户指定的参数。

我尝试编写类似这样的脚本:

#/bin/bash
./program
command 1
command 2
..
quit # A quit command within the program

但程序似乎不明白,在我开始执行后,以下命令应该是 C 程序的参数。

我试图检查我的程序的命令,但也许一个单独的 C 程序来检查它会更好。你会如何建议它被调试?

【问题讨论】:

  • 一旦你的程序启动,其他行在它完成之前不会出现(然后它们作为 shell 命令运行)。如果您的程序从标准输入读取,那么您可以将命令通过管道传递给它。

标签: c bash


【解决方案1】:

你需要告诉shell脚本命令是输入到程序中的:

#!/bin/bash

./program << END
command 1
command 2
..
quit    
END

&lt;&lt; 操作符告诉 shell 以下行被馈送到给定程序的标准输入,直到找到只显示 END 的行。

【讨论】:

  • 请注意,使用这种方法,无法将其他输入提供给programstdin
  • 谢谢,我正在寻找这样的东西。我设法使用“./program
  • 为了完整起见:这种技术称为“here document”或“heredoc”。
【解决方案2】:

对于一个简单的情况,您可以将一串输入输入到您的程序中,例如

echo -e "command 1\ncommand 2\n" | ./program

如果您需要与您的程序进行交互(例如,等待一些输出并可能对其做出反应),您可能需要评估 expect 工具。

【讨论】:

    【解决方案3】:

    第一个程序:

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
            while ( *++argv  )
                    printf("%s\n", *argv);
            return 0;
    }
    

    第二个节目:

    #!/bin/bash
    
    ./program1 argument1 argument2 argument3
    

    一个常见的脚本习惯用法是使用\ 反斜杠字符将命令的参数参数继续到下一行。如下:

    #!/bin/bash
    
    ./stack1 \
    argument1 \
    argument2 \
    argument3
    

    【讨论】:

      猜你喜欢
      • 2014-08-28
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 2020-05-27
      • 2018-01-29
      相关资源
      最近更新 更多