hey eric, the one thing i do not agree that it is the element of least surprise. i would argue that the default behavior for *nix appplications is that they find out what their home directory is and operate relative to that. something like:
script_dir="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")" home_dir=${script_dir%/bin} or production quality code from hadoop-config.sh which is sourced by the main hadoop script: this="${BASH_SOURCE-$0}" bin=$(cd -P -- "$(dirname -- "$this")" && pwd -P) script="$(basename -- "$this")" this="$bin/$script" # the root of the Hadoop installation if [ -z "$HADOOP_HOME" ]; then export HADOOP_HOME=`dirname "$this"`/.. fi i find setting a variable in your shell like CASSANDRA_INCLUDE to be error prone. at some point i will forget what i set it to and them i am by accident using the wrong application. once applications are aware of their home dir all i have to do is "ln -s /usr/lib/cassandra-0.7/bin/nodetool /usr/sbin/nodetool-0.7" and then i can use it without risk of confusion. best, koert On Wed, Aug 24, 2011 at 9:48 PM, Eric Evans <eev...@acunu.com> wrote: > On Wed, Aug 24, 2011 at 1:28 PM, Koert Kuipers <ko...@tresata.com> wrote: > > my problem is that the scripts for my cassandra 0.7 instance don't work > > properly. the problem lies in the code snippets below. when i run the > > scripts they source /usr/share/cassandra/cassandra.in.sh, which has the > > wrong settings (it now loads all the jars from > > /usr/share/brisk/cassandra/lib). i know i can fix it by settings > > CASSANDRA_INCLUDE but i think thats not a very nice solution. > > > > why was the decision made that the central "casssandra.in.sh" should > have > > higher priority than the local one? doesn't that break local installs? > > It was considered the element of least surprise. If it exists in > /usr/share/cassandra then Cassandra's been "installed", and in the > absence of any other data, that's probably what should be used. If > it's a local copy *and* there's a copy installed in > /usr/share/cassandra, it's probably the owner of the local copy that > needs to know what they are doing and intervene with > CASSANDRA_INCLUDE. > > > wouldnt it make more sense if scripts assumed they were in SOMEDIR/bin > and > > then tried to load casssandra.in.sh from SOMEDIR first with the highest > > priority? > > I don't think so, but then I was the one that reasoned out the current > search order, so YMMV. :) > > > code snippet: > > if [ "x$CASSANDRA_INCLUDE" = "x" ]; then > > # Locations (in order) to use when searching for an include file. > > for include in /usr/share/cassandra/cassandra.in.sh \ > > /usr/local/share/cassandra/cassandra.in.sh \ > > /opt/cassandra/cassandra.in.sh \ > > ~/.cassandra.in.sh \ > > `dirname $0`/cassandra.in.sh; do > > if [ -r $include ]; then > > . $include > > break > > fi > > done > > > > -- > Eric Evans > Acunu | http://www.acunu.com | @acunu >