Saturday 25 November 2017

linux - how to get output from `ps` line by line in shell






I want to list a process with its infos through ps in
shell.
Here is my
script:



#!/bin/sh

for
line in `ps aux| grep test.py`
do
echo
$line
done



But
output
is:



hey
13241
0.0
0.3
48388
13528
pts/18

S+
18:50
0:00
python
test.py
hey
13370
0.0
0.0
14504

1016
pts/21
S+
19:00
0:00
grep
test.py


It
divide the line into many parts, but I want I can get one line information about the
process which name is test.py like command in
terminal:




hey 13241 0.0
0.3 48388 13528 pts/18 S+ 18:50 0:00 python test.py
hey 13446 0.0 0.0 14504
976 pts/21 S+ 19:08 0:00 grep --color=auto
test.py


how to solve
that



Answer




The read command
will read one line from standard input and place it into a variable for you. It'll exit
with status 1 when it reaches the end of input, which you can use to end a while
loop:



ps aux | grep test.py |
while read line; do

echo LINE:
echo "$line"

echo
done


If
you want it to, read will split the input into separate
variables using the internal field separator (IFS), and if the input has more fields
than variables, it'll stop splitting when it gets to your last variable and just put the
remainder of the line, unsplit, in there.



Which
means that if you supply just one variable (I called it "line" in the example above),
you'll get the whole line, unsplit, and you won't need to worry about setting
IFS.


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...