3

I tried using ps r > log | wc log but this returns Ambiguous output redirect.. Can someone explain why and provide another solution?

2

3 Answers 3

5

The pipe symbol ("|") redirects the output of one program to the input of another.

You however use ">" to redirect wc's output to a file named log AND at the same time want to redirect the output to STDIN of wc (which won't use it as you provide an input file for wc).

So, you want one of the following (Hint: the latter solution is better as it doesn't create extra files.)

ps r > log ; wc log

or

ps r|wc

BTW: you might want wc to count lines, so wc -l in that case.

2

You are mixing redirection and piping

ps r > log # redirects ps output to a file called log (over writing any contents of log)

What you want is

ps r | wc # this connects the output of ps to the input of wc

If you wanted to use your methodology, then you would need to do the following

ps r > log; wc log

meaning, ps redirects its output to a file called log, then the command wc is run on the file log.

2

Using ps to do this is unreliable -- a process' arguments can contain newlines. A better alternative on Linux is to use /proc/loadavg like so:

awk '{ gsub("[0-9]+/", "") ; print $4 }' /proc/loadavg
1
  • I'm so confused about this. top shows 74 processes, ps -A | wc -l shows 76. ps -A --no-headers | wc -l shows 75. Who is right? Who is wrong? Counting the actual number of processes from ps -A indicates that there are 74 processes. The point is, the 74th process is the ps command. Jun 2, 2014 at 7:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .