Řešení 1:
Limit stanovený prostředím/OS je obvykle jedno nebo dvě stě tisíc znaků.
getconf ARG_MAX
vám poskytne maximální vstupní limit pro příkaz. Na systému Debian mám aktuálně otevřený terminál, který vrací 131072
což je 128*1024
. Limit je redukován vašimi proměnnými prostředí, a pokud mě paměť neklame správně, předává je shell ve stejné struktuře, i když to ve většině případů ubere jen několik stovek znaků. Chcete-li najít přibližnou hodnotu této hodnoty, spusťte env | wc -c
- to navrhuje 325 znaků v aktuálním čase při tomto přihlášení na tomto počítači.
Skripty pravděpodobně povolí tuto plnou délku, ale není nepravděpodobné, že jiné nástroje zavedou svá vlastní omezení, ať už záměrně, nebo kvůli problémům s návrhem. Mohou také existovat umělá omezení délky jednotlivého argumentu na dlouhém příkazovém řádku a/nebo délky cesty k souboru.
Řešení 2:
ARG_MAX skutečně omezuje celkovou velikost příkazového řádku a prostředí, ale čelíte dalšímu omezení:jeden argument nesmí být delší než MAX_ARG_STRLEN (což je bohužel pevně zakódováno na 131072).
Viz https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument
Řešení 3:
Myslíte, jaká je nejdelší proměnná délka? Chcete-li to zjistit, můžete použít "x" v perlu k vytvoření velmi dlouhého názvu proměnné:
VAR=`perl -e 'print "a"x131071'` ; bash a.sh $VAR
V mém systému 131071 funguje:
a proměnná je vytištěna na 131072, je příliš velká:
VAR=`perl -e 'print "a"x131072'` ; bash a.sh $VAR
bash: /bin/bash: Argument list too long