Jak wykonać skrypt w innym katalogu?

51

Próbowałem tego

./home/user/scripts/someScript

ale to nie działa

Brak takiego pliku lub katalogu

jakieś pomysły?

UAdapter
źródło
2
Oczywiście nie ma takiego pliku ani katalogu. Więc podajesz złą ścieżkę. Kropka nie oznacza „wykonaj”. To tylko część ścieżki. W powłoce zwykle wpisujesz albo pliki do wykonania, albo polecenia (które w rzeczywistości są także plikami) :)
Pithikos
pozbądź się tego okresu początkowego i spróbuj ponownie. Alternatywnie ~ / scripts / someScript również będzie działać. pamiętaj również o `` qoutes i programach wykonawczych ($ man exec)
j0h

Odpowiedzi:

61

Wiodąca kropka w poleceniu oznacza „względem bieżącego katalogu”. Usuń go, a odniesie się do „pliku someScriptw katalogu /home/user/scripts:

/home/user/scripts/someScript

Jeśli pojawi się komunikat „Odmowa zezwolenia”, to dlatego, że nie masz wystarczających uprawnień, aby uzyskać dostęp do pliku w katalogu innych użytkowników lub dlatego, że plik nie jest wykonywalny. Aby był wykonywalny, uruchom:

chmod +x /home/user/scripts/someScript
Lekensteyn
źródło
35

Jeśli twój skrypt musi uzyskać dostęp do zasobów w tym samym folderze, z którego jest uruchamiany, i masz go jako ścieżki względne, wówczas twój skrypt się zepsuje.

Zawsze dodaję a cd $(dirname $0)do nagłówka skryptu, więc folder zawierający skrypt będzie folderem głównym.

naisanza
źródło
6

Usunąć .

Jeśli chcesz, aby chmod 755 <nameofscript>skrypt był wykonywalny, aby go uruchomić, wystarczy wpisać ścieżkę do skryptu.

Gdy zobaczysz, ./scriptże jest używany, informuje powłokę, że skrypt znajduje się w tym samym katalogu, w którym go wykonujesz. Aby użyć pełnej ścieżki, wpisz sh /home/user/scripts/someScript.

Bruno Pereira
źródło
sh /path/to/fileróżni się od /path/to/file. shprzebiegi, /bin/shktóre są dowiązane symbolicznie /bin/dash.
Lekensteyn
Po prostu wyjaśnienie przykładów, które widzisz w sieci, zwykle widzisz, sh ./somescriptktóre można również wpisać jako `sh / path / to / script / scriptitself '.
Bruno Pereira,