具有系统功能的c程序中的大括号扩展
brace expansion in c program with system function
我试过命令
cat tmp/file{1..3} > newFile
并且工作完美
但是当我编译并执行下面的c程序时
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main() {
char command[40];
int num_of_points = 3;
sprintf(command,"cat tmp/file{1..%d} > file.Ver",num_of_points);
system(command);
}
消息
cat: tmp/file{1..3}: No such file or directory
出现
系统好像没有进行大括号展开
system
命令的手册页说:
"system()
通过调用 /bin/sh -c command 执行 command 中指定的命令"
所以它不会像 bash 那样执行大括号扩展。
我建议您在一个循环中将文件字符串构建到 cat
,但要注意不要溢出 command
缓冲区。
It seems like system does not make brace expansion
问题出在system()
调用的shell,不是Bash,而是另一个不支持大括号扩展的shell。
您仍然可以使用选项 -c
调用 bash
,以便将 bash
与 system()
一起使用。例如:
system("bash -c 'echo The shell is: $SHELL'")
bash
本身将 运行 在另一个 shell 之上(即:shell system()
调用),但是 echo
命令肯定会 运行 in Bash.
通过在您的代码中应用相同的原则:
sprintf(command,"bash -c 'cat tmp/file{1..%d} > file.Ver'",num_of_points);
将创建您需要传递给 system()
的正确 command
字符串,以便命令 cat tmp/file{1..%d} > file.Ver
在 Bash 和括号扩展中是 运行执行。
我试过命令
cat tmp/file{1..3} > newFile
并且工作完美
但是当我编译并执行下面的c程序时
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main() {
char command[40];
int num_of_points = 3;
sprintf(command,"cat tmp/file{1..%d} > file.Ver",num_of_points);
system(command);
}
消息
cat: tmp/file{1..3}: No such file or directory
出现
系统好像没有进行大括号展开
system
命令的手册页说:
"system()
通过调用 /bin/sh -c command 执行 command 中指定的命令"
所以它不会像 bash 那样执行大括号扩展。
我建议您在一个循环中将文件字符串构建到 cat
,但要注意不要溢出 command
缓冲区。
It seems like system does not make brace expansion
问题出在system()
调用的shell,不是Bash,而是另一个不支持大括号扩展的shell。
您仍然可以使用选项 -c
调用 bash
,以便将 bash
与 system()
一起使用。例如:
system("bash -c 'echo The shell is: $SHELL'")
bash
本身将 运行 在另一个 shell 之上(即:shell system()
调用),但是 echo
命令肯定会 运行 in Bash.
通过在您的代码中应用相同的原则:
sprintf(command,"bash -c 'cat tmp/file{1..%d} > file.Ver'",num_of_points);
将创建您需要传递给 system()
的正确 command
字符串,以便命令 cat tmp/file{1..%d} > file.Ver
在 Bash 和括号扩展中是 运行执行。