2011-09-09 20 views
7

Ho bisogno di eseguire un file di script Groovy da bash, e ho bisogno lo script per avere una directory di lavoro della directory esiste inCome eseguo uno script arbitrario con una directory di lavoro della directory?

Questo è, a mio script bash, sto facendo questo:.

/opt/script/myscript.groovy & 

Ma questo sembra impostare la directory di lavoro su /etc/init.d, la directory da cui sto chiamando. Come cambio la directory di lavoro per quello script in /opt/script?

+0

La risposta è qui in una forma o un altro: http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in – Chris

+0

@Chris: Tranne che non lo è. Lo script arbitrario implica * non bash *. Le risposte specifiche di Bash verranno downvoted. –

risposta

7

/etc/init.d

probabilmente si sta runnig (partenza) che lo script da /etc/init.d?

Aggiungere cd /opt/script alla prima riga dello script

O

... per tenerlo dinamica, aggiungere: cd "$(dirname "$0")"

+0

Abbastanza facile. Il CD prima del resto della sceneggiatura funziona bene. –

1

Qualcosa di simile forse:

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

Il 'popd' non è necessario in nessun ambiente eccetto un file .BAT DOS; ciò che un processo fa per cambiare directory non può influenzare la directory del programma che lo esegue. –

2

In bash, mettendolo nella sceneggiatura funziona meglio:

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

Questo avrà successo anche con la seguente invocazione (di /path/to/script.sh):

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

dove HERE=$(dirname $0) fallirebbe.

Opzionalmente si potrebbe anche usare pwd -P invece di pwd, quindi $HERE conterrà il realpath (canonicalized percorso assoluto), come di man 3 realpath.

15

Se si utilizza start-stop-daemon all'interno dello script /etc/init.d, è possibile usufruire del parametro -d per raggiungere questo:

-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. 
Problemi correlati