3 ms·
For portability. bash is not available everywhere, but POSIX sh is a requirement of POSIX so you can expect it to be there.
by Sir_Cmpwn 9y ago
For portability. bash is not available everywhere, but POSIX sh is a requirement of POSIX so you can expect it to be there.
- yjftsjthsd-h 9y agoExactly: GNU bash is on most GNU/Linux systems, but: * mac OS uses an ancient version of bash * Embedded systems use busybox sh * Android uses its own version of sh * None of the BSDs come with bash, since, y'know GNU licensing EDIT: Formatting
- davewongillies 9y agoAnd to make things interesting Ubuntu uses dash as sh https://wiki.ubuntu.com/DashAsBinSh https://wiki.ubuntu.com/DashAsBinSh
- OJFord 9y ago`sh` is only supposed to be _a_ POSIX-compliant shell, it's not odd/interesting/confusing that Ubuntu uses dash any more than it is that something else uses bash. The shebang line #!/bin/sh should only be used for POSIX-compliant scripts; if it needs {bash, dash, python, etc.} it should start #!/usr/bin/env {bash, dash, python, etc.}.
- yjftsjthsd-h 9y agoIn fairness, that's just for sh; if for some reason you actually need bash you can just use `#!/usr/bin/env bash`
- mjevans 9y agoIf you actually //need// bash ask for it, not sh. This comes from more armature script authors not being precise enough with requirements, or not targeting the more common and portable spec.