我正在努力用类管道实现一个shell.
typedef struct {
char** cmd;
int in[2];
int out[2];
} cmdio;
cmdio cmds[MAX_PIPE + 1];
Run Code Online (Sandbox Code Playgroud)
管道中的命令被读取并存储在其中cmds.
cmdio[i].in是返回的输入管道的文件描述符对pipe().对于从终端输入读取的第一个命令,它只是{fileno(stdin), - 1}.cmdin[i].out输出管道/终端输出类似.cmdio[i].in是一样的cmd[i-1].out.例如:
$ ls -l | sort | wc
CMD: ls -l
IN: 0 -1
OUT: 3 4
CMD: sort
IN: 3 4
OUT: 5 6
CMD: wc
IN: 5 6
OUT: -1 1
Run Code Online (Sandbox Code Playgroud)
我们将每个命令传递给process_command,它执行许多操作:
for (cmdi = 0; cmds[cmdi].cmd != NULL; cmdi++) {
process_command(&cmds[cmdi]);
}
Run Code Online (Sandbox Code Playgroud)
现在,在process_command中:
if (!(pid_fork = fork())) …Run Code Online (Sandbox Code Playgroud) 当在存储库中收到推送时,我需要运行某个命令。该二进制文件位于我添加到 .bashrc 的自定义路径中,并且在 shell 中正常工作。我写了一个小脚本作为 git hook。但是,.bashrc 添加的内容似乎不会影响此脚本。
我试过放在bash ~/.bashrc脚本的顶部,但没有用。如果我手动运行脚本,比如说$ sh post-receive,它工作得很好。怎么了?