2011-09-09 12 views
7

Ben bash gelenekselleşmiş bir komut dosyası çalıştırmak gerekir ve bunun içinde var olan dizinin bir çalışma dizinini olması komut dosyasına gerekDizinin bir çalışma dizini ile rasgele bir komut dosyasını nasıl çalıştırırım?

benim bash komut vardır

, bunu yapıyorum.

/opt/script/myscript.groovy & 

Ancak bu, çalışma dizinini, aradığım dizini /etc/init.d olarak ayarlıyor gibi görünüyor. Bu komut dosyasının çalışma dizinini /opt/script olarak nasıl değiştirebilirim?

+0

cevap çeşit burada ya bir başka: http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in – Chris

+0

@ Chris: Bunun dışında. Keyfi betik * bash değil * anlamına gelir. Bash'e özgü cevaplar düşürülecek. –

cevap

7

/etc/init.d

muhtemelen

Eğer /etc/init.d den (başlangıç) o senaryoyu runnig var? cd "$(dirname "$0")"

+0

Yeteri kadar kolay. Komut dosyasının geri kalanı önce CD'leri iyi çalışıyor. –

1

şey bu belki gibi:

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

Bir DOS .BAT dosyası dışında herhangi bir ortamda 'popd 'gerekli değildir; dizini değiştirmek için bir işlem, onu çalıştıran programın dizinini etkilemez. –

2

ekleyin

VEYA

... dinamik tutmak için senaryonun ilk satırında cd /opt/script ekle bash'da, bu betiğe ekleyerek en iyi şekilde çalışır:

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

Bubile (/path/to/script.sh arasında) aşağıdaki başlatılmasıyla başarılı olur:

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

HERE=$(dirname $0) başarısız olacağı yerdir.

Dilerseniz bunun yerine sadece pwd ardından $HEREman 3 realpath itibariyle realpath (canonicalized mutlak yoludur) içerecektir ait pwd -P kullanabilirsiniz. Eğer /etc/init.d komut dosyası içinde başlatma-durdurma-daemon kullanıyorsanız

15

, bu ulaşmak için -d parametresi yararlanabilirsiniz:

-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. 
İlgili konular