如何从C执行Bash程序?

时间:2016-12-15 14:57:50

标签: c bash

如何用bash执行命令? system()使用sh而不是bash。

我知道我可以使用system("/bin/bash -c command")在bash中执行命令。但是我有一个很长的命令,/bin/bash -c给了我一些问题。我需要的是bashrun(command)或其他。

该命令是字符串,而不是文件

2 个答案:

答案 0 :(得分:4)

案例1:文件中的脚本 - 使用shebang

#!/usr/bin/env bash

在脚本的顶部,然后执行

int status=system("/full/path/to/script");
if(status==-1){
// failure mode
}

案例2:脚本存储为字符串

执行以下操作

char *command="$(which bash) -c 'ls'";
int status=system(command);
if (status==-1){
  //failure mode
}

答案 1 :(得分:0)

如果您正在创建一个非常长的shell命令并且需要bash来解释它,那么您有两个真正的选择:

  1. 将文本保存到文件中并使用文件名作为单个参数调用bash(等效地,使用文件中的shebang将bash指定为解释器,使文件可执行,并将其作为命令调用),或
  2. 使用popen()启动bash实例,并将shell命令作为标准输入写入bash进程。
  3. 如果您因shell脚本引用(而不是命令长度)而遇到问题,那么这些选项中的任何一个都可以使用,或者您可以实现等效的system()但使用{{1}在不经过execl()的情况下传递参数。我在这里假设一个POSIX型系统。

    sh