Sziasztok!
Ismert, hogy ha egy bizonyos limitet eler egy parancs hossza (tipikusan sok file-ra lefuttatott parancsok ilyenek), akkor a fenti hibauzenetet adja a shell.
A megoldas altalaban az xargs, find, es hasonlo parancsok hasznalata, ami scriptben is sokkal stabilabb, mint egy erre fel nem keszitett modszer lenne. Ezeket ismerem, es szoktam is hasznalni.
Viszont interaktiv shell eseten van-e lehetoseg a hossz novelesere? Amikor ezt a limitet kitalaltak, meg nem 64 bites gepek voltak, nem ekkora winyoval (ha volt egyaltalan) es RAMmal. A mostani gepemben valoszinuleg a cache nagyobb, mint az akkori memoria, de a memoriaba is beleferne az akkori hattertar mindenestul. Nem terhelne meg meg az sem, ha parszaz MB meretu lehetne egy parancs hossza, meg az is elferne.
Kenyelmi okokbol fel szeretnem ezt emelni. A kerdesem, hogy ezt hol tehetem meg? Mi korlatozza? Kernelbeli const, ulimit, bash configfile, vagy ezek kozul tobb is?
- 1333 megtekintés
Hozzászólások
régebben (ubuntu 6.06) még én is találkoztam ezzel, viszont kb másfél éve nincs ez a probléma - ubuntu alatt legalábbis. Úgy tudom hogy nincs limit.
- A hozzászóláshoz be kell jelentkezni
A topic cimet Ubunturol copy-paste-eltem.
--
Most popular iPhone App of the month:
Public Telephone Box Locator
- A hozzászóláshoz be kell jelentkezni
milyen verziójú ubunturól?
- A hozzászóláshoz be kell jelentkezni
Egyelore nem frissitettem, 64 bites 9.10
--
Most popular iPhone App of the month:
Public Telephone Box Locator
- A hozzászóláshoz be kell jelentkezni
Tudtommal exec esetén jön elő, tehát ha shell belső paranccsal próbálkozol, akkor nem igazán lehet előhalászni. Klasszikus példa erre:
echo /* /*/* /*/*/* /*/*/*/* # ez belső parancs, nem kell exec
vs
/bin/echo /* /*/* /*/*/* /*/*/*/* # ez viszont külső, és kell exec
És hogy próbáljak a nyitó kérdésre is válaszolni - nyilván kernelbeli paraméter, és fentiek alapján valahol az exec megvalósítás környékén keresgélj.
- A hozzászóláshoz be kell jelentkezni
A kovetkezo kimenetek kerem szepen:
bash --version
uname -a
ulimit -a
Valoszinu 2.6.23 -nal ujabb kerneled van, es valoszinu, ha a stack limitet megnoveled, akkor neked jobb lesz.
ulimit -S -s $(( $(ulimit -S -s) * 2 ))
- A hozzászóláshoz be kell jelentkezni
Aha, ez lesz az (bar ez egy tokmas linux)
~$ ulimit -S -s
8192
~$ true `seq 1 400000`
~$ /bin/true `seq 1 400000`
bash: /bin/true: Argument list too long
~$ ulimit -S -s 16384
~$ true `seq 1 400000`
~$ /bin/true `seq 1 400000`
- A hozzászóláshoz be kell jelentkezni