- 1. コマンドの実行結果を取得する
1. コマンドの実行結果を取得する
やりたかったのは表題の通り。
PID TT STAT TIME COMMAND
640 v0- I 0:00.02 /usr/local/bin/postgres -D /var/db/postgres/data96
2068 v0 Is+ 0:00.00 /usr/libexec/getty Pc ttyv0
2069 v1 Is+ 0:00.00 /usr/libexec/getty Pc ttyv1
2070 v2 Is+ 0:00.00 /usr/libexec/getty Pc ttyv2
2071 v3 Is+ 0:00.00 /usr/libexec/getty Pc ttyv3
2072 v4 Is+ 0:00.00 /usr/libexec/getty Pc ttyv4
2073 v5 Is+ 0:00.00 /usr/libexec/getty Pc ttyv5
2074 v6 Is+ 0:00.00 /usr/libexec/getty Pc ttyv6
2075 v7 Is+ 0:00.00 /usr/libexec/getty Pc ttyv7
2162 0 Ss 0:00.01 USER=hogehoge LOGNAME=hogehoge HOME=/home/hogehoge MAIL=/var/mail/hogehoge PATH=/sbin:/bin:/usr/sbin:/usr/b
2164 0 R+ 0:00.00 USER=hogehoge LOGNAME=hogehoge HOME=/home/hogehoge MAIL=/var/mail/hogehoge PATH=/sbin:/bin:/usr/sbin:/usr/b
で出力される結果からある条件で grep をかけて、プロセスIDのみを収集して出力したいのです。
シェルスクリプトで組もうとも思ったのですが、perl の方が楽のように思えたので
まず、単純に取得結果を出力するには
#!/usr/bin/perl
my $result = `ps -afe`;
print $result;
この中から、postgres をキーワードにした1行を取り出して表示するには
#!/usr/bin/perl
my $result = `ps -afe`;
foreach my $line(@result)
{
if ($line =~ /postgres/)
{
print $line;
}
}
さらにプロセスIDのみを表示するには
#!/usr/bin/perl
my @result = `ps -afe`;
foreach my $line(@result)
{
if ($line =~ /postgres/)
{
my @word = split(/ /, $line);
print $word[1]."\n";
}
}
キーワード postgres を引数として渡すには
#!/usr/bin/perl
my @result = `ps -afe`;
foreach my $line(@result)
{
if ($line =~ /$ARGV[0]/)
{
my @word = split(/ /, $line);
print $word[1]."\n";
}
}
これで、ソースファイルに実行権限をつけて
chmod +x ファイル.pl
./ファイル.pl 引数
で実行できます。
|
|