3

I have a problem with redirections :

$ which python3

gives me

/Library/Frameworks/Python.framework/Versions/3.7/bin/python3

and

$ ls -l /Library/Frameworks/Python.framework/Versions/3.7/bin/python3

gives me

lrwxr-xr-x  1 root  admin  9  5 fév 18:30 /Library/Frameworks/Python.framework/Versions/3.7/bin/python3 -> python3.7

but

which python3 | ls -l

don't gives me the same result.

Do you know why ? And what is the right command for redirection ?

I'm using OSX.

I have to say that the following question pass the output of previous command to next as an argument may be the same as this one, but if I look the answers that were given, there I'm lost. To be useful, they require more advanced knowledge or study than those given here.

marked as duplicate by Michael Homer, Kevin, l0b0, Jeff Schaller, Sparhawk Feb 15 at 4:00

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

12

ls does not take input from standard in, but only from arguments:

Try ls -l "$(which python3)"

12

ls does not read from the pipe. In fact, ls does not use its standard input at all.

Instead, you have to pass the thing you'd like to run ls -l on via the command line of ls:

ls -l "$( which python3 )"

This uses a command substitution on the command line of ls -l which will expand to the output of the which command. This will then be used as a command line argument for ls.

Alternatively:

ls -l "$( command -v python3 )"

Related:

3

Other answers are good, but this is also handy:

which python3 | xargs ls -l

xargs gets values from stdin and appends them as command-line argument to the specified program.

Not the answer you're looking for? Browse other questions tagged or ask your own question.