2016-08-16 43 views
15

Mam dwa Bash skrypty w tym samym folderze (zapisanego gdzieś przez użytkownika, który pobiera całą repozytorium):uruchomić skrypt w tym samym katalogu co skryptu

  • script.sh prowadzony jest przez użytkownika
  • helper.sh wymagana jest i prowadzony przez script.sh

Oba skrypty powinny być w tym samym katalogu. Muszę pierwszy skrypt wywołać drugą, ale istnieją dwa problemy:

  1. znając aktualny katalog roboczy jest bezużyteczny do mnie, bo nie wiem, w jaki sposób użytkownik wykonuje pierwszy skrypt (może być z /usr/bin/script.sh, z ./script.sh, czy może to być z ../Downloads/repo/scr/script.sh)
  2. skrypt script.sh będzie się zmieniać w innym katalogu przed wywołaniem helper.sh.

mogę zdecydowanie włamywanie razem bash, który robi to poprzez przechowywanie the current directory w zmiennej, ale wydaje się, że kod niepotrzebnie skomplikowane dla co ja sobie wyobrazić jest bardzo powszechne i proste zadanie.

Czy istnieje standardowy sposób na niezawodny zadzwoń pod numer helper.sh od script.sh? I będzie działać w każdym systemie operacyjnym obsługiwanym przez Bash?

Odpowiedz

22

Od $0 posiada pełną ścieżkę do skryptu, który jest uruchomiony, można użyć dirname przeciwko temu, aby uzyskać ścieżkę skryptu:

#!/bin/bash 

script_name=$0 
script_full_path=$(dirname "$0") 

echo "script_name: $script_name" 
echo "full path: $script_full_path" 

więc jeśli na przykład przechowywać go w /tmp/a.sh następnie będzie zobaczyć wyjście jak:

$ /tmp/a.sh 
script_name: /tmp/a.sh 
full path: /tmp 

tak

  1. Znając aktualny katalog roboczy jest bezużyteczny do mnie, bo nie wiem, w jaki sposób użytkownik wykonuje pierwszy skrypt (może być z /usr/bin/script.sh z ./script.sh, czy może to być z ../Downloads/repo/scr/script.sh)

Korzystanie z pozwoli Ci śledzić oryginalną ścieżkę.

  1. Skrypt script.sh będzie się zmieniać w innym katalogu przed wywołaniem helper.sh.

Ponownie, ponieważ masz ścieżkę w $0 można cd z powrotem do niego.