I was trying to find all symbolic links in /usr/lib and use file on the first entry in the list, which I delimited with head -n 1.
Why does find /usr/lib -maxdepth 1 -type l | file $(head -n 1) work but find /usr/lib -maxdepth 1 -type l | head -n 1 | file does not?
It complains that I am not using file correctly. Probably because it lacks an argument, but - programmatically/syntactically - why can’t file grab it’s argument from the pipe?


Your syntax is fine, but not all commands/programs accept input from the pipe, or more accurately from stdin. Looking at the man page for file (https://www.man7.org/linux/man-pages/man1/file.1.html) I can’t see a stdin option, so you have to pass each of the files from your
headoutput as arguments to file.I learned this the hardway with ffmpeg… In my defense… Their documentation IS huge !!!
Kinda interested if
2>&1would also work in this case?2>&1pipes stderr to stdout, which would not affect a binary like file which doesn’t parse stdin. You would need something likexargs filewhich would convert the stdout to command line arguments.Thanks for the clarification :)) still new the all the bash syntax and always interested to hear what more skilled people have to say !
Thanks! Yeah, I just came to the realization that this was more about my lack of understanding of the file command than anything else.