Hacker News new | ask | show | jobs
by throwaway09223 1695 days ago
There's a problem with "command -v," in that it's not actually a command. It's a Bourne shell builtin.

You can't use `command -v` in csh or other shells, only in Bourne style shells (bash, zsh, etc).

/usr/bin/which is a standalone binary. It can be invoked without a shell at all.

Many comments discussing `command` being part of POSIX are I think missing that `command` is only part of POSIX insofar as the Bourne shell is defined by POSIX. It is part of a POSIX `/bin/sh` and is not its own thing.

Keeping /usr/bin/which is the correct decision and it should probably be added to POSIX.

1 comments

You can use command -v in any POSIX compliant shell. csh is not POSIX compliant. Your list of shells in inexhaustive to the point of being almost misleading. bash and zsh are "heavy-weight" shells, a lot of lightweight shells also support command.

If you're specifying your shebang as #!/bin/sh then you should not assume you have access to functions like type or binaries like which, but you can generally assume you have access to the command built-in.

> If you're specifying your shebang as #!/bin/sh then you should not assume you have access to functions like type

'type' is actually POSIX though. bash does extend it.

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/t...

Well the point is that it's a shell component, so it's not available from anything other than a shell which is undesirable.

I understand Bourne style (POSIX) shells have the vast majority of the market, but the point is breaking other environments. "command -v" is not available everywhere so it is not a viable replacement for /usr/bin/which.

"which" is also not available everywhere, that's how I know about "command -v".