Snažím se zadat příkaz s VELMI velkým argumentem (velikost 1 MB), ale říká „Seznam argumentů je příliš dlouhý“. Jak mohu zadat tento argument?
OS:Linux Ubuntu
Přijatá odpověď:
Neexistuje způsob, jak předat argument mezi spustitelné soubory, pokud je větší než ARG_MAX
jádra limit.
Pokud máte seznam argumenty, které jsou příliš dlouhé, lze je rozdělit na menší části, např. s xargs
. Toto spustí příkaz tolikrát, kolikrát je potřeba, a poskytne tolik argumentů, kolik se vejde.
Syntaxe je xargs command <file
. Pokud vynecháte command
, zobrazí své argumenty, například echo
.
Jako demo,
xargs -n 4 </etc/motd
vytiskne první čtyři tokeny na jeden řádek (první vyvolání), další čtyři na další atd. (-n
argument nastavuje maximální počet argumentů, takže se nepoužívá ARG_MAX
limit vůbec.)
Pokud má příkaz, který chcete spustit, nežádoucí účinky, nemusí to fungovat. Například pokud command
přepíše všechny dříve existující ./a.out
po jeho dokončení vám zjevně zůstanou pouze výsledky z posledního spuštění.
Pokud můžete nakonfigurovat nebo upravit command
takže místo argumentu příkazového řádku přečte soubor nebo standardní vstup, který omezení obejde. Soubor nebo stream může být mnohem větší než ARG_MAX
a často je.