I have a problem with redirections :

$ which python3

gives me



$ 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


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.


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

Try ls -l "$(which python3)"

| improve this answer | |

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.


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


| improve this answer | |

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.

| improve this answer | |
  • This is much the best answer in my view, easy to apply to similar and more general cases of command line usage and output redirection. Thanks @jick. – MikeRoger Jan 15 at 10:49

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