我如何执行一个任意的脚本与其目录中的工作目录?

我需要从bash执行一个groovy脚本文件,我需要脚本有一个它所在的目录的工作目录。

也就是说,在我的bash脚本中,我正在这样做:

/opt/script/myscript.groovy & 

但是,这似乎将工作目录设置为/etc/init.d ,我从调用的目录。 如何将该脚本的工作目录更改为/opt/script

Solutions Collecting From Web of "我如何执行一个任意的脚本与其目录中的工作目录?"

/etc/init.d

可能你是runnig(启动)从/etc/init.d脚本?

cd /opt/script的第一行添加cd /opt/script script

要么

…保持动态,添加: cd "$(dirname "$0")"

如果在/etc/init.d脚本中使用start-stop-daemon,则可以利用-d参数来实现此目的:

  -d, --chdir path Chdir to path before starting the process. This is done after the chroot if the -r|--chroot option is set. When not specified, start-stop-daemon will chdir to the root directory before starting the process. 

bash把这个脚本最好的工作:

 HERE=$(cd -- $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) cd -- "$HERE" 

即使执行以下调用( /path/to/script.sh ),也会成功:

 PATH="/path/to:$PATH" bash script.sh 

其中HERE=$(dirname $0)将会失败。

也可以使用pwd -P而不是pwd ,那么$HERE将包含man 3 realpath的realpath(规范化的绝对​​路径名)。

这样的事情可能是:

 SCRIPT=/opt/script/myscript.groovy pushd `dirname $SCRIPT` ./`basename $SCRIPT` popd