[OmniOS-discuss] [discuss] pkgsrc-2013Q2 binary packages for illumos now available
Jim Klimov
jimklimov at cos.ru
Sat Aug 3 06:55:12 UTC 2013
Hello Jonathan,
I was reading through your release notes (blog entry) here:
http://www.perkin.org.uk/posts/whats-new-in-pkgsrc-2013Q2.html
and stumbled upon this bit of information:
: Also on OmniOS 'od' is located in a different location
$ sed -i -e 's,/usr/bin/od,/usr/gnu/bin/od,' /opt/local/bin/startx
I believe (didn't try yet) that /opt/local/bin/startx is a script;
wouldn't it be more correct to have it handle setting the proper
environment - either as force-prepending its PATH defaults (and
not using full paths to commands), or perhaps defining variables
for the full paths to binaries?
A pattern like this might be used for this particular example:
### Note we don't preset an OD="" so that one can be inherited from env
for F in /usr/bin/od /usr/gnu/bin/od ; do
[ x"$OD" = x -a -x "$F" ] && OD="$F"
### An ultimate test might be to try executing the program with
### an expected zero-return, like "$OD < /dev/null > /dev/null"
### to filter out broken binaries, missing dynamic libs, etc.
done
### The "which" command can be used to fall back to a binary in PATH:
[ x"$OD" = x ] && F="`which od`" && case "$F" in
/*) [ -x "$F" ] && OD="$F" ;;
esac
### Sanity check: we have a good variable
[ x"$OD" = x -o ! -x "$OD" ] && \
echo "ERROR: OD not available: '$OD'" >&2 && exit 1
This way you have your $OD set to a sane value, detection of which
you might further enhance by logic that would consider per-distro
nuances. And this would be a least-surprise (and less manual work)
for users on various platforms.
With some "eval" trickery this pattern can be turned into a shell
function (Bourne sh, bash, maybe others) to set the provided shell
variable to the matched one of provided binaries.
HTH,
//Jim Klimov
More information about the OmniOS-discuss
mailing list