Lista de argumentos muito longa

5

Estou tentando inserir um comando com um argumento MUITO grande (tamanho de 1 MB), mas ele diz "Lista de argumentos muito longa". Como posso entrar nesse argumento?

SO: Linux Ubuntu

    
por MCCCS 27.04.2017 / 19:07

1 resposta

16

Não há como passar um argumento entre executáveis se ele for maior que o limite ARG_MAX do kernel.

Se você tem uma lista de argumentos que é muito longa, pode-se dividir em pedaços menores, por exemplo. com xargs . Isso executa o comando quantas vezes forem necessárias, fornecendo tantos argumentos quanto couberem.

A sintaxe é xargs command <file . Se você omitir command , ele exibirá seus argumentos, como echo .

Como demonstração,

xargs -n 4 </etc/motd

imprimirá os primeiros quatro tokens em uma linha (primeira invocação), os próximos quatro em outro, etc. (O argumento -n define um número máximo de argumentos, portanto, isso não usa o limite ARG_MAX em tudo.)

Se o comando que você deseja executar tiver efeitos colaterais indesejáveis, isso pode não funcionar. Por exemplo, se o command sobrescrever qualquer arquivo ./a.out previamente existente, você obviamente ficará com os resultados da última execução após a conclusão.

Se você puder configurar ou modificar command para ler um arquivo ou entrada padrão, em vez de um argumento de linha de comando, isso funcionará em torno da restrição. Um arquivo ou fluxo pode ser muito maior que ARG_MAX e geralmente é.

    
por 27.04.2017 / 19:29