5 ms·
Linux from Scratch has a very tiny implementation suitable for all systems that have bash installed: #!/bin/bash type -pa "$@" | head -n 1 ; exit ${PIPESTA
by mike256 5y ago
Linux from Scratch has a very tiny implementation suitable for all systems that have bash installed:
#!/bin/bash
type -pa "$@" | head -n 1 ; exit ${PIPESTATUS[0]}
Just save it as which, chmod +x and add to path.
https://www.linuxfromscratch.org/blfs/view/svn/general/which.html https://www.linuxfromscratch.org/blfs/view/svn/general/which...
- Athas 5y agoNot all systems have bash as /bin/bash. A shebang line of '#!/usr/bin/env bash' would be even more portable.
- richardwhiuk 5y agoNot all systems have env has /usr/bin/env.
- pxc 5y agoThe presence of the env command is required by POSIX, and /usr/bin/env is the closest thing we have to a standard path for it.
- richardwhiuk 5y ago/bin/bash is the closest thing we to a standard path for bash.
- IggleSniggle 5y agoI like bash 4+ for associative arrays, and use it on macOS. But macOS is still v3 by default (for /bin/bash). I think `/usr/bin/env bash` is a great shebang, for the record, but I'm not totally convinced that it's more portable than `/bin/bash`. Can you explain what makes it actually more portable? In absence of that, you might actually expect `/bin/bash` to be more portable, as at least you can more likely make assumptions based on the OS.
- lvass 5y ago>Can you explain what makes it actually more portable? POSIX. The NixOS machine I'm typing this on has /usr/bin/env but not /bin/bash.
- IggleSniggle 5y agothanks
- gnubison 5y agoPOSIX does not specify /usr/bin/env, but the location is pretty much universal anyways.
- pxc 5y agoThe install path of the `env` executable varies less across operating systems than the install path of the `bash` executable. Some `bash` installation paths by operating system: typical GNU/Linux: /bin/bash FreeBSD, NetBSD, OpenBSD: /usr/local/bin/bash Solaris, Illumos, OpenIndiana, SmartOS, etc.: /usr/bin/bash macOS: /bin/bash NixOS, GuixSD†: /run/current-system/sw/bin/bash but all of these operating systems have a standards-compliant `env` installed at `/usr/bin/env`. — †: GuixSD may have slightly tweaked the structure of their profiles; I'm not sure if it's at `.../sw/bin` or it's something else after the ...