Sto cercando di inserire un comando con un argomento MOLTO grande (1 MB di dimensione), ma dice "Lista di argomenti troppo lunga". Come posso inserire quell'argomento?
Sistema operativo:Linux Ubuntu
Risposta accettata:
Non c'è modo di passare un argomento tra eseguibili se è più grande di ARG_MAX
del kernel limite.
Se hai un elenco di argomentazioni troppo lunghe, è possibile suddividerlo in parti più piccole, ad es. con xargs
. Questo esegue il comando tutte le volte che è necessario, fornendo tutti gli argomenti che si adattano.
La sintassi è xargs command <file
. Se ometti command
, mostra i suoi argomenti, come echo
.
Come demo,
xargs -n 4 </etc/motd
stamperà i primi quattro token su una riga (prima invocazione), i successivi quattro su un'altra, ecc. (Il -n
argomento imposta un numero massimo di argomenti, quindi questo non usa ARG_MAX
limite.)
Se il comando che si desidera eseguire ha effetti collaterali indesiderati, potrebbe non funzionare. Ad esempio, se il command
sovrascriverà qualsiasi ./a.out
precedentemente esistente file, rimarrai ovviamente con i risultati dell'ultima esecuzione al termine.
Se puoi configurare o modificare command
quindi legge un file, o input standard, invece di un argomento della riga di comando, che aggirerà la restrizione. Un file o uno stream può essere molto più grande di ARG_MAX
, e spesso lo è.