Hi all I have a quick question. Is it better for my zsh shell to be in /usr/bin/zsh or /bin/zsh. I remember reading that one of them would mess up the whole system since zsh is not posix compliant. I believe that szh shouldn’t be set as the root shell. I now have it in /usr/bin/zsh, is that good? So now when I drop into a root shell I don’t get they autocompletion feature that zsh has. I’d also lose that fancy theme. Does that mean my root shell is still bash? Thanks
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.Thank you for the detailed answer.