mrwad99
asked on
Pipe operator confusion!
Ah hello.
I am reading a Linux book which gives the following example command
ls | diff /dev/fd/0 oldfilelist
It apparently will compare the output of ls to that stored in oldfilelist. I understand that /dev/fd/0 is stdout, but I don't quite understand how it ties in with the use of the pipe.
1) Can someone please clarify how this is working?
2) When I type
ls |
I get a single > prompt. I have tried to find out what this means/what is happening but have failed. Can someone also clarify this please?
TIA
I am reading a Linux book which gives the following example command
ls | diff /dev/fd/0 oldfilelist
It apparently will compare the output of ls to that stored in oldfilelist. I understand that /dev/fd/0 is stdout, but I don't quite understand how it ties in with the use of the pipe.
1) Can someone please clarify how this is working?
2) When I type
ls |
I get a single > prompt. I have tried to find out what this means/what is happening but have failed. Can someone also clarify this please?
TIA
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks Ken, and sorry because my question was unclear. I understand that the pipe is for redirection, but what I don't understand is how the output from 'ls' suddenly gets treated as the first argument to diff, which is in fact standard input!
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Argh I typed a huge comment then but accidentally navigated away and lost it! Oh well..
In a nutshell, my confusion came from the fact that I have never had to explicitly refer to the input stream before, hence I was not seeing that /dev/fd/0 as an argument to a command after a | is in fact the output of the command prior to |.
Obvious now I know :)
I have figured out my second question: it seems that the prompt is waiting for me to enter whatever I want on the right hand side of the pipe: if I type ls -l, then hit enter, then type "more", it is as if I typed "ls -l | more" outright.
Thanks both for providing input :)
In a nutshell, my confusion came from the fact that I have never had to explicitly refer to the input stream before, hence I was not seeing that /dev/fd/0 as an argument to a command after a | is in fact the output of the command prior to |.
Obvious now I know :)
I have figured out my second question: it seems that the prompt is waiting for me to enter whatever I want on the right hand side of the pipe: if I type ls -l, then hit enter, then type "more", it is as if I typed "ls -l | more" outright.
Thanks both for providing input :)
I do not believe that "ls |" is doing anything extra for you. You can get the same results with just "diff item1 item2" as you will with " ls | diff item1 item2. "
When you use the pipe operator the system expects to see a command or string after the pipe. If you do not enter any information after the pipe and press enter, then you are prompt to enter it which is why you get the > .
1. For example, if you enter "ls |" and press enter your will get the >.
2. Then enter diff and your files to compare: > "diff item1 item2" then press enter.
3. Your second set of input completed the initial pipe requirements and you will see a list if your info was entered correctly or an error if not.
When you use the pipe operator the system expects to see a command or string after the pipe. If you do not enter any information after the pipe and press enter, then you are prompt to enter it which is why you get the > .
1. For example, if you enter "ls |" and press enter your will get the >.
2. Then enter diff and your files to compare: > "diff item1 item2" then press enter.
3. Your second set of input completed the initial pipe requirements and you will see a list if your info was entered correctly or an error if not.
ASKER
Thanks Terry, and welcome to EE.
Shame, if I was a bit slower you would have gotten your first points for that explanation...
The purpose of the "ls |" is to compare the current contents of the working directory with those stored in oldfilelist, as a mechanism for seeing what has changed in the directory without having to output the current directory contents first.
Shame, if I was a bit slower you would have gotten your first points for that explanation...
The purpose of the "ls |" is to compare the current contents of the working directory with those stored in oldfilelist, as a mechanism for seeing what has changed in the directory without having to output the current directory contents first.
ASKER