εκτέλεση shell commands μέσα σε perl script
Michael Iatrou
m.iatrou at freemail.gr
Fri Apr 17 00:13:02 EEST 2009
When the date was Thursday 16 April 2009, Γιώργος Πάλλας wrote:
> Καλησπέρα και χρόνια πολλά σε όλους!
>
> Εχω το παρακάτω απλό scriptάκι:
>
> #!/usr/bin/perl
# Even for one-liners...
use strict;
use warnings;
> # PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
> #25074 root 39 19 3328 488 420 R 91.5 0.0 194:49.03 cat
> # 3003 root 20 0 202m 51m 12m S 6.0 2.6 2:36.22 Xorg
> # 4 root 15 -5 0 0 0 S 2.0 0.0 1:39.61 ksoftirqd/0
>
> @out = `top -n1`;
@out = `top -bn1`;
> while($line = shift @out){
> last if ($line =~ /%CPU/);
> }
>
> # Auti i line prepei na exei ton top CPU user
> $line = shift @out;
>
> @f = split(/\s+/, $line);
>
> print "pid: $f[0], cpu: $f[8], command: $f[11]\n";
>
> @out = `renice 19 $f[0]`;
> print @out;
>
> @out = `ionice -c3 -p $f[0]`;
> print @out;
>
>
> ======================================
>
> Δεν μπορώ να καταλάβω γιατί μου βγάζει output:
>
> mordor:/home/gpall# perl /root/proj/katsekala.pl
> pid: 25074, cpu: 94.5, command: cat
> sh: -c: line 0: syntax error near unexpected token `('
> sh: -c: line 0: `renice 19 25074'
> sh: -c: line 0: syntax error near unexpected token `('
> sh: -c: line 0: `ionice -c3 -p 25074'
>
> Αφού από ό,τι βλέπω, τις εντολές τις φτιάχνει κανονικά ("renice 19
> 25074" και "ionice -c3 -p 25074"), τότε που βρίσκει αυτην την αναπάντεχη
> παρένθεση; Εντωμεταξύ αν μέσα στο script αντικαταστήσω τη γραμμή:
> @out = `renice 19 $f[0]`;
> με
> @out = `renice 19 25074'`;
>
> τότε αυτό το κομμάτι παίζει. Άρα κάτι έχει να κάνει με την αντικατάσταση
> της μεταβλητής $f[0] μέσα στην προς εκτέλεση εντολή. Κάνω κάτι λάθος;;
Ασφαλώς, αλλά αφήνεται σαν άσκηση στον αναγνώστη. (hint: είσαι σίγουρος ότι
δεν υπάρχει παρένθεση; hint++: xxd)
--
Μιχάλης Ιατρού (tchk)
More information about the Linux-greek-users
mailing list