我试图&#34;合并&#34;两个命令在一个(不存在)命令中并管道它。我的意思是..假设您有这两个命令:grep text < file.txt | wc -l > out.txt
,可以表示这两个命令的(不存在)命令可能类似于{{1然后将行数输出到out.txt中。基本上这些(grepwc)命令应该具有与(grepwc -l < file.txt)
相同但更短的行为。
我试过这样的事情,但我认为我的方法远远不能实现目标。我使用名为commlist的结构,其中包含已由cmd,argc和argv解析的命令。 inputfile和outputfile是open()上使用的文件的路径名。
我使用的结构。
grep text < file.txt | wc -l > out.txt
和代码:
typedef struct command {
char *cmd;
int argc;
char *argv[MAXARGS+1];
struct command *next;
} COMMAND;
完整的代码在这里:
答案 0 :(得分:2)
你的方法确实有点过于复杂。这可以通过一个子进程和一个管道来实现(就像在原始shell命令中一样)。我们来看看它:
setDT(df1)[, RatedStudyID :=if(!any(CATMERater==Rated)) NA_integer_
else StudyID[CATMERater ==Rated], .(Rated, TeamID)]
此
但是只分叉一个进程就足够了,因为我们不需要返回父进程。这导致以下代码:
grep text < file.txt | wc -l > out.txt
#include <stdlib.h>
#include <unistd.h>
int main (void) {
int fd[2];
pipe(fd);
if (fork()) {
// Child process
dup2(fd[0], 0); // wc reads from the pipe
close(fd[0]);
close(fd[1]);
execlp("wc", "wc", "-l", NULL);
} else {
// Parent process
dup2(fd[1], 1); // grep writes to the pipe
close(fd[0]);
close(fd[1]);
execlp("grep", "grep", "celio", NULL);
}
exit(EXIT_FAILURE);
}
仅在其中一个exit()
失败时才会到达。