εκτέλεση 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