
Estou tentando inserir um comando com um argumento MUITO grande (1 MB de tamanho), mas aparece "Lista de argumentos muito longa". Como posso entrar nesse argumento?
SO: Linux Ubuntu
Responder1
Não há como passar um argumento entre executáveis se ele for maior que o ARG_MAX
limite do kernel.
Se você tem umlista deargumentos muito longos, dividi-los em pedaços menores pode ser feito, por exemplo, com xargs
. Isso executa o comando quantas vezes forem necessárias, fornecendo quantos argumentos couberem.
A sintaxe é xargs command <file
. Se você omitir command
, ele exibirá seus argumentos, como echo
.
Como uma demonstração,
xargs -n 4 </etc/motd
imprimirá os primeiros quatro tokens em uma linha (primeira invocação), os próximos quatro em outra, etc. (O -n
argumento define um número máximo de argumentos, portanto, isso não usa o ARG_MAX
limite.)
Se o comando que você deseja executar tiver efeitos colaterais indesejáveis, isso pode não funcionar. Por exemplo, se command
substituir qualquer arquivo existente anteriormente ./a.out
, você obviamente ficará com os resultados apenas da última execução após sua conclusão.
Se você puder configurar ou modificar command
para que ele leia um arquivo ou entrada padrão, em vez de um argumento de linha de comando, isso contornará a restrição. Um arquivo ou fluxo pode ser muito maior que ARG_MAX
, e geralmente é.