使用 execvp 创建一个文件
Create a file with execvp
我正在尝试 运行
echo "Hello world" > foo.txt
使用 execvp。
到目前为止,我有这个:
#include <unistd.h>
int main(void) {
char *execArgs[] = { "echo", "Hello, World! > foo.txt", NULL };
execvp("echo", execArgs);
return 0;
}
这将打印出行 "Hello, World! > foo.txt",
而不是创建一个名为 foo.txt 的文件,其中包含文本 "Hello, World!"。
有人在 Stack overflow 上做了类似的事情,他们这样做了:
execlp( "/bin/sh", "/bin/sh", "-c", "cat file1.txt > redirected.txt", (char *)NULL );
但是当我把它改成
execlp( "echo", "echo", "echo Hello World > redirected.txt", (char *)NULL );
没有任何反应。
编辑:
这样做有效(谢谢,SometimesRight!)
execlp( "/bin/sh", "/bin/sh", "-c", "echo Hello, World! > redirected.txt", (char *)NULL );
execlp 运行它希望在 PATH 中找到的可执行文件。但是 echo 不是可执行文件,它是在 shell 命令解释器(例如 sh 或 bash.
的上下文中运行的命令
我收回:在Linux /bin 中有一个echo 可执行文件。但是,要使用“>”将其通过管道传输到标准输出,您需要 shell 的帮助,例如 'sh'.
我正在尝试 运行
echo "Hello world" > foo.txt
使用 execvp。
到目前为止,我有这个:
#include <unistd.h>
int main(void) {
char *execArgs[] = { "echo", "Hello, World! > foo.txt", NULL };
execvp("echo", execArgs);
return 0;
}
这将打印出行 "Hello, World! > foo.txt", 而不是创建一个名为 foo.txt 的文件,其中包含文本 "Hello, World!"。
有人在 Stack overflow 上做了类似的事情,他们这样做了:
execlp( "/bin/sh", "/bin/sh", "-c", "cat file1.txt > redirected.txt", (char *)NULL );
但是当我把它改成
execlp( "echo", "echo", "echo Hello World > redirected.txt", (char *)NULL );
没有任何反应。
编辑:
这样做有效(谢谢,SometimesRight!)
execlp( "/bin/sh", "/bin/sh", "-c", "echo Hello, World! > redirected.txt", (char *)NULL );
execlp 运行它希望在 PATH 中找到的可执行文件。但是 echo 不是可执行文件,它是在 shell 命令解释器(例如 sh 或 bash.
的上下文中运行的命令我收回:在Linux /bin 中有一个echo 可执行文件。但是,要使用“>”将其通过管道传输到标准输出,您需要 shell 的帮助,例如 'sh'.