Limit on number of pipes after long-running command?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Limit on number of pipes after long-running command?
# 1  
Old 05-16-2019
Limit on number of pipes after long-running command? [SOLVED]

I'm trying to create a minimal, crude keylogger for X using only a shell script. I was quickly stumped: Why do these two commands entered in a terminal emulator produce output when I type...

Code:
$ xinput test 6 | grep press

Code:
$ xinput test 6 | awk '{print $3}'

...but this command produces no output:
Code:
$ xinput test 6 | grep press | awk '{print $3}'

?

This observation is really challenging my understanding of stdout, stdin, and pipes.

BTW, 6 is the id of my keyboard, which I found by running xinput list. My shell is bash version 5.0.3

Last edited by DevuanFan; 05-16-2019 at 01:10 PM..
# 2  
Old 05-16-2019
grep filters lines and shows only lines which contain "press" (case sensitive).

What's the output of xinput test 6 in all cases?
# 3  
Old 05-16-2019
And so?
Code:
$ xinput test 6 | grep press | awk '{print $0}'

# 4  
Old 05-16-2019
Here is the output in the terminal when I type unix after executing the command:

Code:
$ xinput test 6
key press   30 
key release 30 
key press   57 
key release 57 
key press   31 
key release 31 
key press   53 
key release 53

This is the output I want (you'd think this would be the output of the third command in my original post when, in fact, that command outputs nothing):
Code:
30
57
31
53

--- Post updated at 03:00 PM ---

@nezabudka: The command you suggested generates no output, either.
# 5  
Old 05-16-2019
I don't know what you mean by 6 is the id of my keyboard, which I found by running xinput list, but how about:
Code:
xinput test 6 6>&1 | awk '/press/ {print $3}'

# 6  
Old 05-16-2019
@vgersh99: X input devices have id's, which vary from machine to machine (on my machine, X sees the keyboard as input id=6 and mouse as input id=7, for instance).

Yes, the command you suggested gives the desired output when I type unix:
Code:
$ xinput test 6 | awk '/press/ {print $3}'
30
57
31
53

But it still leaves unanswered why we can only use one pipe after xinput test 6. For instance, this command produces no output when I type unix, although I'd expect grep to generate some ouput when u is pressed:
Code:
$ xinput test 6 | awk '/press/ {print $3}' | grep 30

What I'm trying to understand is why one pipe after xinput test 6 works fine, but two pipes never produce any output even when output is expected. That's the point of the thread.

Last edited by DevuanFan; 05-16-2019 at 12:20 PM..
# 7  
Old 05-16-2019
Quote:
Originally Posted by DevuanFan
@vgersh: Yes, the command you suggested gives the desired output when I type unix:
Code:
$ xinput test 6 | awk '/press/ {print $3}'
30
57
31
53

But it still leaves unanswered why we can only use one pipe after xinput test 6. For instance, this command produces no output when I type unix, although I'd expect grep to generate some ouput when u is pressed:
Code:
$ xinput test 6 | awk '/press/ {print $3}' | grep 30

What I'm trying to understand is why one pipe after xinput test 6 works fine, but two pipes never produce any output even when output is expected.
well, it's not the "number" of pipes, but the output redirection of xinput:
Code:
xinput test 6 6>&1 | awk '/press/ {print $3}'

seems that xinput test 6 put its output not to stdout stream, but to stream with fileDescriptor 6, but the following awk reads its input from stdin (where stdin has the fd=1).
Hence, we need to map fd=6 of xinput to fd=1: 6>&1 for the awk to read its input from fd=1
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

awk command input string too long, limit

cat filename| awk '{ $1=""; print $0}' in my file there are few lines that has more than 3000 characters per line and as soon as I run the above command it cores, strings core reveals that the awk is failing because input string too long, limit. can i get some help from the experts to find... (8 Replies)
Discussion started by: knijjar
8 Replies

2. UNIX for Beginners Questions & Answers

How to put a 80 character limit on a long topic line in markdown?

I have a topic line in markdown that spans more than 80 characters that i need to add a line break. Markdown is simply treating the line break as a brand new line instead of continuing as a topic line. Eg: # This is a very long line Markdown interprets it as This is a very long line (4 Replies)
Discussion started by: dragonpoint
4 Replies

3. UNIX for Dummies Questions & Answers

Limit process number in TOP command outupt

Linux top command prints more than 40 processes. top -b -n 1 > Top_Output.txt Is there a straight-forward option/way to limit only till the top 5 processes. ( Instead of using head, tail or other unix commands together) (1 Reply)
Discussion started by: vikram3.r
1 Replies

4. UNIX for Dummies Questions & Answers

Limit Number of files

hi guys how can i limit number of files in a disk or partition ? or how can i make a limit to inode number for a disk or partition ? ext3 or ext4 file system (1 Reply)
Discussion started by: mhs
1 Replies

5. Shell Programming and Scripting

While loop running after reaching limit

Hi frnds i am newbie in linux and trying to write a simple script for adding users.the problem is i am running a while loop under function and loop is running for 3 time more than limit.Here is my Script and output pls help me out : # CREATE N NO. OF USERS WITH PASSWORD IN SYSTEM #... (4 Replies)
Discussion started by: Vaibhav.T
4 Replies

6. UNIX for Advanced & Expert Users

Limit on Number of Cron Jobs Running on one Account

Hello, I have some 150 Cron Jobs running under my UNIX account. I want to add some more jobs. Is there a limit to the number of cron jobs that can be run on an account? Thank you. Pramodini (8 Replies)
Discussion started by: Pramodini Rode
8 Replies

7. Solaris

How to limit number of Commands

Is there a way that I can limit number of commands that one user can run during period of time. For example Max 10 commands per senconds.:) (3 Replies)
Discussion started by: winger0608
3 Replies

8. Shell Programming and Scripting

Counting the number of pipes in line

Hi, I'm using the ksh shell. The scenario: I have a couple of directories /home/fd /home/fd/prsd home/fd/stg now i have number of files in each of these directories. some of the files are zipped using gzip so their extension is .gz the content of the files is as follows ... (4 Replies)
Discussion started by: nirnay_s
4 Replies

9. UNIX for Dummies Questions & Answers

Number of long limit

Hi Hi! I'm currently using AIX 5.2 and would like to know where can i find to see that there's a restriction on the number of login times a user can have. Example, I want give a 2 login per user but some one to give 3 login and some one have to give unlit login time (without logging off the... (2 Replies)
Discussion started by: herath
2 Replies

10. Shell Programming and Scripting

How to limit the number of running instances of a script?

I would like to allow only one instance of a script to run at any moment. I've tried the following solution to count the instances but the result is always the number of running instances plus one and I can't find the problem ps -ef | grep $0 | sed '/^$/ d' | sed '/grep/ d' | wc -l Please... (2 Replies)
Discussion started by: oti
2 Replies
Login or Register to Ask a Question