Você deseja obter a saída de um comando e transformá-lo em argumentos. Tente a substituição do comando:
./foo $(< footest.args)
Estou tentando descobrir como posso enviar argumentos (que são conteúdos em um arquivo) na linha de comando como parâmetros para uma função cpp. Eu não estou tentando enviá-lo através de stdin.
Eu tenho uma função chamada foo.cpp:
$ cat foo.cpp
#include <iostream>
int main (int argc, char *argv[]) {
for (int i = 1; i < argc; i++)
std::cout << argv[i] << std::endl;
return 0;
}
$ g++ -o foo foo.cpp
$ ./foo hello world
hello
world
No último comando executado, estou passando os argumentos "hello world" para o programa. No entanto, e se eu tiver "hello world" em um arquivo? Por exemplo:
$ cat footest.args
$ hello world
Como eu passaria o conteúdo de footest.args para ./foo como acima? Eu tentei
./foo | cat footest.args
Mas parece que não está funcionando. O que estou fazendo errado?
Você deseja obter a saída de um comando e transformá-lo em argumentos. Tente a substituição do comando:
./foo $(< footest.args)
Você pode conseguir o que quiser com:
cat footest.arg | xargs ./foo
ou (graças a @glenn)
xargs ./foo < footest.arg
evitando um uso desnecessário de cat
.
Tags command-line bash arguments