Passando o conteúdo de um arquivo na linha de comando [duplicado]

0

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?

    
por Jake 01.10.2015 / 18:01

2 respostas

3

Você deseja obter a saída de um comando e transformá-lo em argumentos. Tente a substituição do comando:

./foo $(< footest.args)
    
por 01.10.2015 / 18:06
1

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 .

    
por 01.10.2015 / 18:09