2011-09-09 12 views
7

necesito para ejecutar un archivo de comandos maravilloso a partir de fiesta, y necesito el guión para tener un directorio de trabajo del directorio existe en¿Cómo ejecuto un script arbitrario con un directorio de trabajo del directorio en el que está?

Eso es, en mi escritura del golpe, que estoy haciendo esto:.

/opt/script/myscript.groovy & 

Pero esto parece configurar el directorio de trabajo en /etc/init.d, el directorio desde el que llamo. ¿Cómo cambio el directorio de trabajo para ese script al /opt/script?

+0

La respuesta está aquí de una forma u otro: http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in – Chris

+0

@Chris: Excepto que no lo es. El script arbitrario implica * no bash *. Bash respuestas específicas serán downvoted. –

Respuesta

7

/etc/init.d

probablemente usted está RUNNIG (partida) que el guión de /etc/init.d?

Añadir cd /opt/script en la primera línea del script

O

... para mantenerlo dinámico, añadir: cd "$(dirname "$0")"

+0

Bastante fácil. CD'ing antes de que el resto del script funcione bien. –

1

Algo como esto quizá:

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

El 'popd' no es necesario en ningún entorno excepto en un archivo DOS .BAT; lo que hace un proceso para cambiar de directorio no puede afectar el directorio del programa que lo ejecuta. –

2

En bash poner eso en el script funciona mejor:

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

Esto tendrá éxito incluso con la siguiente invocación (de /path/to/script.sh):

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

donde HERE=$(dirname $0) fracasarían.

Opcionalmente también se puede utilizar en lugar de sólo pwd -Ppwd, entonces $HERE contendrá la ruta real (canonicalized ruta absoluta) a partir del man 3 realpath.

15

Si está utilizando start-stop-daemon dentro del guión de /etc/init.d, se puede aprovechar el parámetro -d para lograr esto:

-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. 
Cuestiones relacionadas