2011-09-09 24 views
7

我需要执行从庆典Groovy脚本文件,我需要的脚本,有它存在于目录的工作目录如何执行一个任意脚本与目录的工作目录?

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

/opt/script/myscript.groovy & 

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

+0

答案就在这里以某种形式另:http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in – Chris

+0

@Chris:除非不是。任意脚本意味着*不是bash *。 Bash具体答案将被降低。 –

回答

7

/etc/init.d

可能是你运行过程中出现(起点),从/etc/init.d脚本?

在脚本的第一行添加cd /opt/script

OR

...保持它的动态,添加: cd "$(dirname "$0")"

+0

够简单。在脚本的其余部分工作正常之前CD'ing。 –

1

事情是这样的,也许:

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

除了DOS .BAT文件外,'popd'在任何环境中都不是必需的;一个进程如何改变目录不会影响运行它的程序的目录。 –

2

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

15

如果您正在使用的/etc/init.d脚本中的启动停止守护进程,你可以利用-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. 
相关问题