So I’m trying to use the sh (Bourne Shell) to write some scripts. I keep running into this confusion. For the following:
1. rm `echo test`
2. echo test | rm
I know backticks are used to run the command first, okay.
But for piping in #2, why doesn’t rm take in test as an argument? Is there something about piping I don’t understand? I thought it was simply sending output of one command as the input to another.
And… related to my piping confusion maybe.
dir=/blah/blar/blar
files=`ls ${dir} -rt`
count=`wc -l $files` # doesn't work, in fact it's running it along with each file that exists
count2=`$files | wc -l` # doesn't work
How come I can’t store the ls into “files” and use that?
You would need to use
xargsthere, asrmtakes arguments to delete, it doesn’t read from theSTDIN(which is what pipes typically pipe).The first one works because backticks are for substitutions, much like
${}but not as easy. 🙂Alternatively, you could use
find.