Jak wykonać skrypt bash w terminalu?


108

Mam skrypt bash taki jak:

#!/bin/bash

echo Hello world!

Jak to zrobić w terminalu?


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.


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


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.


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


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


10

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

Następnie wpisz

bash program-name.sh

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 .

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


-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ł.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.