Hacker News new | ask | show | jobs
by z29LiTp5qUC30n 2016 days ago
It should be pushd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1

not cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1

with a matching popd at the end

Otherwise it can screw up parent scripts

2 comments

Really scripts should avoid called `cd` or `pushd`/`popd` wherever possible. It's a lot better to just work with absolute directories, i.e. as someone else pointed out:

    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
no no no... god this is gross and awful

  SELF=${0##*/}    # aka basename
  DIR=${0%/*}      # aka dirname
Running a script as sh script.sh returns only script.sh, thus, you've already got SELF, but you wouldn't get DIR.
but, you don't need it since you are already there, and can just use $PWD (no need for `pwd`) from that point onward.
Not unless the script is source'd, which is very unlikely.