Jak wykonać skrypt bash w terminalu?

108

Mam skrypt bash taki jak:

#!/bin/bash

echo Hello world!

Jak to zrobić w terminalu?

Ballon
źródło
27
Czy ma uprawnienia do wykonywania? Spróbuj chmod +x scriptnamea potem ./scriptname.
dirkgently

Odpowiedzi:

49

$prompt: /path/to/scripti naciśnij Enter. Pamiętaj, że musisz upewnić się, że skrypt ma uprawnienia do wykonywania.

prodigitalson
źródło
1
Jeśli już jesteś w /path/to katalogu, np. Za pomocą cd /path/topolecenia, możesz wejść, ./scriptaby uruchomić skrypt. Nie zapomnij w tym przypadku o znaku „./” przed „script”
FrViPofm
120

Jeszcze inny sposób wykonania tego (tym razem bez ustawiania uprawnień do wykonywania):

bash /path/to/scriptname
Wstrzymano do odwołania.
źródło
26

cd do katalogu zawierającego skrypt lub umieść go w folderze bin znajdującym się w $ PATH

następnie wpisz

./scriptname.sh

jeśli w tym samym katalogu lub

scriptname.sh

jeśli znajduje się w folderze bin.

John Boker
źródło
9
Działa to tylko wtedy, gdy skrypt ma ustawiony bit wykonania. To prawdopodobnie wymaga rozwiązania.
Bryan Oakley
./scriptname.shdziała dla mnie, ale scriptname.shdaje scriptname.sh: command not found. -rwxr-xr-xto jego uprawnienia.
Spikatrix
1
Porada, by cdw ogóle gdziekolwiek indziej, prowadzi do kolejnego nieporozumienia powszechnego wśród początkujących. O ile skrypt wewnętrznie nie ma zależności, które wymagają, aby działał w określonym katalogu (np. Konieczność odczytania pliku danych, na który skrypt w niewytłumaczalny sposób nie udostępnia opcji wskazania), nigdy nie powinieneś potrzebować cdnigdzie, aby go uruchomić i bardzo często nie chce.
tripleee
24

Mógłbyś:
sh scriptname.sh

xCra2yx
źródło
6
Głos przeciw: To źle, jeśli jest to właściwie skrypt Bash.
tripleee
1
Głos za: To jest w porządku w Mac OS X, jeśli twój skrypt bash znajduje się w tym samym katalogu
Karl Taylor
30
@kot „Zdarza się, że u mnie działa” jest bardzo dalekie od „to jest poprawna odpowiedź”. To może działać, jeśli shjest dowiązaniem do bash, lub jeśli skrypt nie korzysta z żadnej Bash specyficzną konstrukcję. W pierwszym przypadku używanie bashzamiast shjest jedynym poprawnym, przenośnym rozwiązaniem; w tym drugim przypadku nie jest to poprawna odpowiedź na to konkretne pytanie, ponieważ OP zapytał o radę dotyczącą skryptu Bash. Podanie złej odpowiedzi jest nieodpowiedzialne; użytkownicy, którzy nie rozumieją różnicy, często publikują w tym miejscu i trzeba im pokazać, dlaczego ta odpowiedź „zadziałała dla mnie” nie zadziałała w ich przypadku.
tripleee
@kraftydevil too ^ Jeden z kilku popularnych zduplikowanych celów w tym temacie: stackoverflow.com/questions/5725296/…
tripleee
5
@kot Powtarzam: Są sytuacje, w których to działa (tak jak się dowiedziałeś), ale nie jest to poprawna odpowiedź w ogólnym przypadku na pytanie w nagłówku. Taka odpowiedź powinna przynajmniej wyjaśniać warunki, w jakich to działa; ale moja sugestia byłaby taka, aby po prostu usunąć tę odpowiedź.
tripleee
14

Po pierwsze trzeba uczynić go wykonywalnym przy użyciu: chmod +x name_of_your_file_script.

Po utworzeniu pliku wykonywalnego możesz go uruchomić za pomocą ./same_name_of_your_file_script

Donald Shahini
źródło
10

Zmień katalog na miejsce, w którym znajduje się skrypt , używając polecenia cd

Następnie wpisz

bash program-name.sh
gaurav07
źródło
6
Nie ma potrzeby cdnigdzie; możesz podać dowolnie złożoną nazwę ścieżki jako argument bash; faktycznie, każdy program, który przyjmuje argument nazwy pliku, działa w ten sposób (lub jest przerażająco, otępiająco zepsuty).
tripleee
10

To stary wątek, ale trafiłem na niego i jestem zaskoczony, że nikt jeszcze nie udzielił pełnej odpowiedzi. Więc oto idzie ...

Samouczek dotyczący wykonywania skryptu wiersza poleceń!

P: Jak to zrobić w terminalu?

Nieporozumienia i konflikty:

  • Ty robisz nie potrzebują „rozszerzenie” (jak .SH lub .py lub czegokolwiek innego), ale pomaga śledzić rzeczy. To nie będzie bolało. Jeśli jednak nazwa skryptu zawiera rozszerzenie, musisz go użyć.
  • Ty robisz żadnego powodu nie musisz znajdować się w żadnym określonym katalogu.
  • Ty robisz nie trzeba wpisywać się nazwy programu, który uruchamia plik (BASH lub Python lub cokolwiek), chyba że chcesz. To nie będzie bolało.
  • Zdajesz nie trzeba sudorobić nic z tego. To polecenie jest zarezerwowane do uruchamiania poleceń jako inny użytkownik lub użytkownik „root” (administrator). Świetny post tutaj .

(Osoba, która dopiero uczy się, jak wykonywać skrypty, nie powinna używać tego polecenia, chyba że jest to naprawdę potrzebne, na przykład instalacja nowego programu. Dobre miejsce do umieszczenia skryptów jest w folderze ~ / bin. Możesz się tam dostać, wpisując cd ~/binlub cd $HOME/binz poziomu monitu terminala. Będziesz mieć pełne uprawnienia w tym folderze).

Aby „wykonać ten skrypt” z terminala w systemie typu Unix / Linux, musisz zrobić trzy rzeczy:

  1. Poinformuj system o lokalizacji skryptu. (Wybierz jedno)

    • Wpisz pełną ścieżkę z nazwą skryptu (np /path/to/script.sh.). Możesz zweryfikować pełną ścieżkę, wpisującpwd lub echo $PWDw terminalu.
    • Wykonaj z tego samego katalogu i użyj ./jako ścieżki (np./script.sh .). Łatwo.
    • Umieść skrypt w katalogu, który jest w systemie PATHi wpisz nazwę (np script.sh.). Możesz zweryfikować system PATH, wpisując echo $PATHlub echo -e ${PATH//:/\\n}jeśli chcesz uporządkowaną listę.
  2. Poinformuj system, że skrypt ma uprawnienia do wykonania. (Wybierz jedno)

    • Ustaw "bit wykonania", wpisując chmod +x /path/to/script.shw terminalu.
    • Możesz również użyć, chmod 755 /path/to/script.shjeśli wolisz liczby. Istnieje wielka dyskusja z wykresu chłodnym tutaj .
  3. Podaj systemowi typ skryptu. (Wybierz jedno)

    • Wpisz nazwę programu przed skryptem. (na przykładBASH /path/to/script.sh lub PHP /path/to/script.php) Jeśli skrypt ma rozszerzenie, takie jak .php lub .py, jest częścią nazwy skryptu i należy je dołączyć.
    • Użyj shebangu , który widzę, że masz (#!/bin/bash ) w swoim przykładzie. Jeśli masz to jako pierwszą linię skryptu, system użyje tego programu do wykonania skryptu. Nie ma potrzeby pisania programów ani używania rozszerzeń.
    • Użyj „przenośnego” shebanga . Możesz także zlecić systemowi wybranie wersji programu, która jest pierwsza w programie PATH, używając, #!/usr/bin/enva następnie nazwy programu (np. #!/usr/bin/env bashLub #!/usr/bin/env python3). Istnieją zalety i wady, które szczegółowo omówiono tutaj .
Michael Treanor
źródło
1
Całkiem dobre podsumowanie. Może w ostatnim przykładzie przypomnij ludziom, że script.shi script.phpsą to dosłowne nazwy plików tych skryptów, i że jeśli umieścisz rozszerzenie w nazwie pliku, musisz je dołączyć podczas uruchamiania skryptu (i odwrotnie; jeśli skrypt nie t mieć rozszerzenie, nie umieszczaj go). Jest to odmienne od np. DOS, w którym można pominąć .batlub .exez nazwy pliku, a pliki muszą mieć rozszerzenie z małego zestawu, aby mogły być uznane za wykonywalne.
tripleee
1
Innym częstym błędem jest początkujący niezrozumienia różnicy między path, /path, ./path, i ~/path. Myślę, że prawdopodobnie nie chcesz tego tutaj wyjaśniać, ale może link do wyjaśnienia, takiego jak ... o cholera, musiałem to opublikować .
tripleee
1

I jeszcze jeden sposób

. /path/to/script

Jakie jest znaczenie kropki?

Jedz w Joes
źródło
Spowoduje to wykonanie skryptu w bieżącej powłoce, który należy wywołać. To nie jest to, czego większość ludzi spodziewa się po prostu uruchomić skrypt. Może to mieć skutki uboczne w istniejącym środowisku.
Inżynier oprogramowania
-2

Jeśli jesteś w katalogu lub folderze, w którym plik skryptu jest dostępny, po prostu zmień uprawnienia do pliku w trybie wykonywalnym, wykonując

chmod +x your_filename.sh

Następnie uruchomisz skrypt za pomocą następującego polecenia.

$ sudo ./your_filename.sh

Wyżej "." reprezentują bieżący katalog. Uwaga! Jeśli nie jesteś w katalogu, w którym znajduje się plik skryptu bash, zmień katalog, w którym znajduje się plik, używając

cd Directory_name/write the complete path

Komenda. W przeciwnym razie skrypt nie będzie działał.

Hassan Shamshir
źródło
Mam nadzieję, że wszyscy to zrobią, ponieważ wspominam o wszystkich powiązanych koncepcjach dotyczących tego konkretnego problemu.
Hassan Shamshir
Jak wyjaśniono w innych odpowiedziach tutaj, sudojest źle i potencjalnie strasznie źle, jeśli używasz go na niezaufanym skrypcie, który nadużywa mocy, które niepotrzebnie mu dałeś.
tripleee
Rada, aby cdgdzieś znaleźć, jest trudna do zrozumienia, ale prawdopodobnie także błędna.
tripleee