Jak wykonać skrypt bash?

19

Więc napisałem swój pierwszy skrypt bash:

#!/bin/bash
echo 'hello world!'
exit

Wiem, że ma odpowiednią lokalizację do bashowania i jest wykonywalna:

$ which bash
/bin/bash
$ chmod +x myscript.sh

Teraz chcę uruchomić go z wiersza polecenia, ale pojawia się błąd:

$ myscript.sh
myscript.sh: command not found

Zamiast tego próbuję tego i to działa:

$ bash myscript.sh
hello world!

Czy tak zawsze będę musiał to wykonać? Wydaje mi się, że wykonałem inne skrypty bez konieczności ich poprzedzania bash. Jak mogę uruchomić myscript.sh bez konieczności poprzedzania go bash?

Aktualizacja: Oto dobre wyjaśnienie, dlaczego i jak wykonać skrypt bash .

Andrzej
źródło

Odpowiedzi:

28

Musisz ustawić plik jako wykonywalny. Możesz to zrobić za pomocą

chmod +x <filename>

gdzie jest nazwa twojego skryptu, a następnie musisz go uzupełnić, ./aby poinstruować powłokę o uruchomieniu pliku w katalogu lokalnym, na przykład:

./script.sh

Możesz uruchamiać tylko te pliki, które są w twoim pliku PATHlub które określasz ścieżkę do nich. ./, lokalny katalog nie znajduje się PATHdomyślnie, ponieważ ktoś może go używać do niecnych celów. Wyobraź sobie skrypt o nazwie lsupuszczony w katalogu, wchodzisz do tego katalogu, uruchamiasz się, lsa ten skrypt robi coś złego.

W tym momencie możesz uczynić go bardziej przenośnym, uruchamiając powłokę zamiast bash, używając:

#!/bin/sh

lub uruchamiając bash bez względu na to, gdzie jest zainstalowany, o ile jest zainstalowany:

#!/usr/bin/env bash
pupeno
źródło
Zrobiłem to już z chmod + x myscript.sh. Czy zrobiłem to źle?
Andrew,
1
Prawdopodobnie brakuje ./ Dodałem go do odpowiedzi.
pupeno
1

Oprócz porady Fernándeza poprzedzamy ją następującym punktem:

./myscript.sh

Ze względów bezpieczeństwa bieżący katalog nigdy nie jest zawarty w ścieżce wykonania.

harrymc
źródło
1

Istnieją 3 sposoby wykonania skryptu bash. Na przykład myscript.sh jako skrypt, który chcesz wykonać.

Metoda 1

wykonaj skrypt jako podproces, który spowoduje problemy z uprawnieniami, jeśli nie właścicielem zapisu. Możesz zmienić uprawnienia przez chmod.

$ chmod + x myscript.sh

$ ./myscript.sh

Metoda 2

uruchom skrypt jako bieżący użytkownik. jeśli skrypt bash jest dobrze napisany, nie powinien zawierać błędów.

$ bash myscript.sh

Metoda 3

podobny do metody 2, ale skrót. zauważ, że jest to oparte na założeniu, że używasz powłoki bash w bieżącej sesji.

$. myscript.sh

mam nadzieję że to pomoże!:)

Jimmy MG Lim
źródło