this post was submitted on 15 Aug 2023
41 points (100.0% liked)
Linux
45595 readers
700 users here now
From Wikipedia, the free encyclopedia
Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).
Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.
Rules
- Posts must be relevant to operating systems running the Linux kernel. GNU/Linux or otherwise.
- No misinformation
- No NSFW content
- No hate speech, bigotry, etc
Related Communities
Community icon by Alpár-Etele Méder, licensed under CC BY 3.0
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Depends on your distro. Various distros are merging /bin into /usr/bin (as you may expect, Debian members have been fighting about this for a while).
In the end it's all just preferences and conventions. If you want to put zsh in /var/spool/mail/bin/ then you should. As long as you include the path in the necessary
$PATH
variables (and probably make sure ACLs are set alright) it really doesn't matter for your personal system.POSIX compliance sounds like a weird argument. Any script will have a shebang (
#!/bin/env sh
) to pick the interpreter they prefer.sh
usually meansbash
because of assumptions, but unless you go out of your way, these scripts will not be run throughzsh
.It should be
#!/usr/bin/env ...
On my machine
/bin/env
,/usr/bin/env
, and/usr/sbin/env
are all hard-linked to the same file. Probably because every distro puts it some place else and the Manjaro folks just like to be compatible :)On your system. Check out the table halfway down where env is located on different systems: https://www.cyberciti.biz/tips/finding-bash-perl-python-portably-using-env.html
Sure, things usually put env in /usr/bin, but there's no guarantee for that. All standards like POSIX guarantee is that the standard PATH contains certain binaries.
Hardcoding /usr/bin/env is probably your best bet, but hardcoding any path is making assumptions that POSIX complaint shells don't guarantee.
That's why
#!env
is probably your best bet, but people hate shebangs without absolute paths.There is even less guarantee for it to be anywhere else.
Because it is the convention.
It definitely isn't. That might work in your user space instance of bash in the desktop, but will likely fail in a script invoked during boot, and is guaranteed to fail on several non-gnu/non-linux systems.
#!/usr/bin/env
is the agreed convention and there is no probably or but about that. If that does not work on a system it is a bug (looking at you BusyBox containers 🤨).Thank you for the detailed answer.