Primeiro, a repreensão: Uma das regras menos conhecidas de programação de script shell (e até mesmo o uso interativo do shell) é não usar
cat
some_file|
some_command
a menos que você tenha um bom motivo para isso. Ah, claro, funciona, mas é um estilo ineficiente e ruim. E claro,
cat
some_file
é a maneira mais simples de exibir um arquivo no terminal; isso é bom. E
cat
options file|
some_command
e
cat
file1 file2|
some_command
estão bem. Mas
cat
some_file|
some_command
(com apenas um nome de arquivo na linha de comando cat
) quase sempre pode ser convertido para
some_command
<
some_file
E espero que seja desnecessário dizer que, se
cat
some_file|
some_command
é ruim,
less
some_file|
some_command
é provavelmente pior. Por que você não diz
xargs -0 java -cp ... mypackage.ClassName
<
file
Mas isso não resolveria seu problema.
Eu acredito que
a resposta que você procura é:
xargs
–a
file-0 java -cp ... mypackage.ClassName
Este (ou, equivalentemente, - arg-file = arquivo ) diz ao xargs
para abrir arquivo , < em> não como entrada padrão , e lê a partir dela e processa da maneira que normalmente trataria stdin, mas deixa a entrada padrão original sozinha, e a torna disponível para o programa exec. Aviso: nem todas as versões de xargs
suportam isso.
A propósito, você está esperando que arquivo seja tão grande que seu conteúdo não cabe em uma linha de comando, então seu programa precisará ser executado várias vezes, com subconjuntos de > arquivo como argumentos?