[CentOS] bash: return status of an assignment

Sun Feb 28 00:39:58 UTC 2021
Skylar Thompson <skylar2 at uw.edu>

I think this is a problem with the precedence of && vs ||. If INSMOD is not
set, it will work as you intend, but once it's set, only the || branch will
execute.

You can fix it if you group the assignments together:

[ -z "$INSMOD" ] && (INSMOD=$(which modprobe) || INSMOD="$(which insmod)")

On Sat, Feb 27, 2021 at 01:32:55PM -0800, Kenneth Porter wrote:
> In the sqm-scripts package for managing network traffic shaping is this line
> for finding a program suitable for loading the kernel shaping modules:
> 
> [ -z "$INSMOD" ] && INSMOD=$(which modprobe) || INSMOD=$(which insmod)
> 
> It seems to set INSMOD to /usr/sbin/insmod, even though /usr/sbin/modprobe
> is available. (Both are symlinks to ../bin/kmod.)
> 
> According to this article, the return value of the first assignment should
> be success and it shouldn't take the fallback statement:
> 
> <https://unix.stackexchange.com/questions/270828/how-is-the-return-status-of-a-variable-assignment-determined>
> 
> Also working the issue here:
> 
> <https://github.com/tohojo/sqm-scripts/issues/133>
> 
> _______________________________________________
> CentOS mailing list
> CentOS at centos.org
> https://lists.centos.org/mailman/listinfo/centos

-- 
-- Skylar Thompson (skylar2 at u.washington.edu)
-- Genome Sciences Department, System Administrator
-- Foege Building S046, (206)-685-7354
-- University of Washington School of Medicine