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):
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.
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.
@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
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:
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ę.
Poinformuj system, że skrypt ma uprawnienia do wykonania. (Wybierz jedno)
Możesz również użyć, chmod 755 /path/to/script.shjeśli wolisz liczby. Istnieje wielka dyskusja z wykresu chłodnym tutaj .
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 .
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ć .
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ł.
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.
chmod +x scriptname
a potem./scriptname
.Odpowiedzi:
$prompt: /path/to/script
i naciśnij Enter. Pamiętaj, że musisz upewnić się, że skrypt ma uprawnienia do wykonywania.źródło
/path/to
katalogu, np. Za pomocącd /path/to
polecenia, możesz wejść,./script
aby uruchomić skrypt. Nie zapomnij w tym przypadku o znaku „./” przed „script”Jeszcze inny sposób wykonania tego (tym razem bez ustawiania uprawnień do wykonywania):
źródło
cd do katalogu zawierającego skrypt lub umieść go w folderze bin znajdującym się w $ PATH
następnie wpisz
jeśli w tym samym katalogu lub
jeśli znajduje się w folderze bin.
źródło
./scriptname.sh
działa dla mnie, alescriptname.sh
dajescriptname.sh: command not found
.-rwxr-xr-x
to jego uprawnienia.cd
w 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ćcd
nigdzie, aby go uruchomić i bardzo często nie chce.Mógłbyś:
sh scriptname.sh
źródło
sh
jest dowiązaniem dobash
, lub jeśli skrypt nie korzysta z żadnej Bash specyficzną konstrukcję. W pierwszym przypadku używaniebash
zamiastsh
jest 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.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
źródło
Zmień katalog na miejsce, w którym znajduje się skrypt , używając polecenia cd
Następnie wpisz
źródło
cd
nigdzie; możesz podać dowolnie złożoną nazwę ścieżki jako argumentbash
; 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).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:
sudo
robić 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 ~/bin
lubcd $HOME/bin
z poziomu monitu terminala. Będziesz mieć pełne uprawnienia w tym folderze).Poinformuj system o lokalizacji skryptu. (Wybierz jedno)
/path/to/script.sh
.). Możesz zweryfikować pełną ścieżkę, wpisującpwd
lubecho $PWD
w terminalu../
jako ścieżki (np./script.sh
.). Łatwo.PATH
i wpisz nazwę (npscript.sh
.). Możesz zweryfikować systemPATH
, wpisującecho $PATH
lubecho -e ${PATH//:/\\n}
jeśli chcesz uporządkowaną listę.Poinformuj system, że skrypt ma uprawnienia do wykonania. (Wybierz jedno)
chmod +x /path/to/script.sh
w terminalu.chmod 755 /path/to/script.sh
jeśli wolisz liczby. Istnieje wielka dyskusja z wykresu chłodnym tutaj .Podaj systemowi typ skryptu. (Wybierz jedno)
BASH /path/to/script.sh
lubPHP /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ć.#!/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ń.PATH
, używając,#!/usr/bin/env
a następnie nazwy programu (np.#!/usr/bin/env bash
Lub#!/usr/bin/env python3
). Istnieją zalety i wady, które szczegółowo omówiono tutaj .źródło
script.sh
iscript.php
są 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ąć.bat
lub.exe
z nazwy pliku, a pliki muszą mieć rozszerzenie z małego zestawu, aby mogły być uznane za wykonywalne.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ć .I jeszcze jeden sposób
Jakie jest znaczenie kropki?
źródło
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ł.
źródło
sudo
jest źle i potencjalnie strasznie źle, jeśli używasz go na niezaufanym skrypcie, który nadużywa mocy, które niepotrzebnie mu dałeś.cd
gdzieś znaleźć, jest trudna do zrozumienia, ale prawdopodobnie także błędna.