czwartek, 12 czerwca 2014

Lista argumentów za długa

Ponieważ w przeciwieństwie do MSW w Linuksie długość wiersza poleceń jest absurdalnie duża zapomniałem, że jednak jest skończona:


system ("perl", "clickshop-delete.pl", "-items", join (',', @AllItems))

Program clickshop-delete.pl nie jest wykonywany. Żeby ustalić czemu dodaję:


system ("perl", "clickshop-delete.pl", "-items", join (',', @AllItems)) \
== 0 or warn "system failed: $? [$!]\n";

Teraz wiadomo czemu nie działa:


system failed: -1 [Lista argumentów za długa]

Poniższe ustala jak długi może być wiersz poleceń (Debian Lenny na Sheevaplug/ARM):


tomek@neptune:~$ getconf ARG_MAX
131072

Prosty sposób na zmodyfikowanie skryptu z wykorzystaniem splice:


my $max2process=6000; # każdy element @AllItems ma 12 znaków, więc 6000 jest OK
while ( my @items2process = splice @AllItems, 0, $max2process ) {
system ("perl", "clickshop-delete.pl", "-items", join (',', @items2process)) == \
0 or warn "system failed: $? [$!]\n";
}

Powinno działać.

Brak komentarzy:

Prześlij komentarz