Jak uruchomić skrypty .sh?

344

Ilekroć otwieram plik .sh, otwiera go w gedit zamiast w terminalu. Nie mogę znaleźć żadnej opcji podobnej do Kliknięcia prawym przyciskiemOtwórz za pomocąInna aplikacja ...Terminal .

Jak mogę otworzyć ten plik w terminalu?

Alex
źródło
Czy ten skrypt ma na celu ustawienie zmiennych env do dalszego wykorzystania?
Rob
1
Nie powinieneś używać rozszerzeń skryptów. W pewnym momencie w przyszłości może się okazać, że inny język jest bardziej odpowiedni do wykonywania zadań, które wykonuje obecny skrypt. I wtedy masz problem. Czy zachowujesz starą nazwę z całkowicie mylącym rozszerzeniem, czy też zmieniasz jej nazwę, być może musisz edytować wiele miejsc, w których używasz skryptu?
geirha
Nie potrzebujesz rozszerzenia pliku. Miło jest mieć, ale nie jest potrzebne. System operacyjny nie patrzy na rozszerzenie pliku. Patrzy na dane
ActionParsnip
5
Meh, jeśli przepiszesz foo.sh w ruby, zawsze możesz użyć pliku .sh do uruchomieniaruby foo.rb
glenn jackman
W Dolphin możesz nacisnąć F4 i otworzy się konsola
Motte001 16.06.16

Odpowiedzi:

523

Zezwól na wykonanie skryptu:

chmod +x /path/to/yourscript.sh

Aby uruchomić skrypt:

/path/to/yourscript.sh

Ponieważ .odnosi się do bieżącego katalogu: jeśli yourscript.shznajduje się w bieżącym katalogu, możesz uprościć to do:

./yourscript.sh
karthick87
źródło
13
+1 tylko odpowiedź, aby pokazać dodawanie uprawnień do wykonywania tylko w terminalu.
Hailwood
83
Jeśli tak bash /path/to/yourscript.sh, to nie potrzebujeszchmod +x
Aleksandr Levchuk
4
W rzeczywistości można użyć, . /path/to/yourscript.shjeśli skrypt musi skonfigurować niektóre zmienne środowiskowe.
Rob
1
Nikt nie wspomina o tradycji: ./path/to/yourscript.sh(bez spacji po .)? Uważam, że jeden jest najprostszy i najłatwiejszy w użyciu ... Ale tak czy inaczej, oto moja alternatywa, która powinna zrobić prawie to samo, co ./zrobiłbym, chociaż nie rozumiem, dlaczego nie używałbyś ./: (FILENAME=~/rem4space.sh;SLL=$(cat $FILENAME|head -1|sed 's:^#!\(.*\):\1:g');[ ! -z $SLL ] && exec $SLL $FILENAME;sh $FILENAME)... edytuj FILENAMEwedług własnych upodobań . Należy również pamiętać, że shzostanie użyty, jeśli nie ma alternatywy.
MiJyn
88

Musisz zaznaczyć skrypty powłoki jako pliki wykonywalne, aby uruchomić je z menedżera plików:

  1. Kliknij .shplik prawym przyciskiem myszy i wybierz Właściwości :

    wprowadź opis zdjęcia tutaj

  2. Na karcie Uprawnienia zaznacz Zezwalaj na uruchamianie pliku jako programu :

    wprowadź opis zdjęcia tutaj

  3. Zamknij okno Właściwości i kliknij dwukrotnie plik. Pojawi się okno dialogowe z opcją uruchomienia skryptu w terminalu:

    wprowadź opis zdjęcia tutaj

Izajasza
źródło
10
To nie działa w Ubuntu 13.04. W każdym razie nadal otwiera się w gedit, nigdy nie prosi mnie o wykonanie. Edycja: Nvm, imjustmatthew odpowiada na to pytanie.
mpen
Przed użyciem tego musimy zezwolić na uprawnienie do pliku przy użyciu chmod. chmod + x nazwa_pliku.sh lub chmod 755 nazwa_pliku.sh
Arvind Rawat
Nie mam wyskakującego okienka! IDE jest otwarte od razu, a nie wyskakujące okienko
Zielony
Dlaczego nie mogę znaleźć „uruchom w terminalu” nigdzie w moim interfejsie? (Ubuntu 18.04)
Daniel Möller,
1
@ DanielMöller, oto odpowiedź na twoje pytanie. askubuntu.com/questions/38661/how-do-i-run-sh-files/…
Akhilesh Dhar Dubey
33

Otwórz terminal i przejdź do folderu, w którym .shznajduje się plik. Następnie wpisz:

sh <name of file>.sh
włoska stopa
źródło
najlepszy sposób na otwarcie dowolnej aplikacji. Przejdź do katalogu .sh, a następnie otwórz go w wierszu polecenia. użyj sh <nazwa pliku jak pokazano powyżej> .sh, jeśli wymaga to uprawnień, użyj chmod + x /path/to/yourscript.sh lub kliknij prawym przyciskiem myszy i zmień uprawnienia do wszystkich
Durgesh Kumar
24

Warunek wstępny

Zanim będziesz mógł uruchomić plik .sh, musisz go uruchomić:

  1. Kliknij plik prawym przyciskiem myszy
  2. Wybierz Właściwości
  3. Wybierz Uprawnienia
  4. Wybierz Zezwalaj na uruchamianie pliku jako programu

Ostrzeżenie

Upewnij się, że ufasz źródłu, z którego pochodzi plik. To może być wirus .

Bardzo prosty sposób

  1. Kliknij dwukrotnie plik
  2. Kliknij Uruchom w terminalu

To ma problem. Terminal zamknie się natychmiast i nie będzie widać wyjścia.

Prosty sposób

  1. Otwórz Aplikacje -> Akcesoria -> Terminal
  2. Przeciągnij i upuść plik .sh do terminala i naciśnij klawisz Enter

Sposób, w jaki robią to profesjonaliści

  1. Otwórz Aplikacje -> Akcesoria -> Terminal
  2. Znajdź, gdzie plik .sh

    • Użyj poleceń lsicd
    • lswyświetli listę plików i folderów w bieżącym folderze . Spróbuj: wpisz „ls” i naciśnij klawisz Enter.
    • Gdy zobaczysz folder, do którego chcesz przejść, uruchom cd, następnie spację, a następnie nazwę folderu
    • Jeśli cd ..przejdziesz do folderu, którego nie chciałeś, biegnij, aby przejść o jeden poziom wyżej
  3. Uruchom plik .sh

    • Gdy zobaczysz na przykład script1.shz lsuruchom to:

      ./script.sh

Dlaczego to skomplikowane?

Terminal ma bogaty zestaw potężnych narzędzi, które są dostępne po wpisaniu poleceń. Specjaliści zlokalizują plik .sh, wpisując lsi cd. Po znalezieniu się w odpowiednim bieżącym folderze możesz uruchomić skrypt w następujący sposób:

./script1.sh

lub możesz uruchomić i przekierować dane wyjściowe do pliku:

./script1.sh > out.txt

lub możesz filtrować dane wyjściowe pod kątem słów kluczowych (np. „jabłka”), a następnie przekierować do pliku:

./script1.sh | grep apples > ./only-apples

Istnieją tysiące rzeczy, które możesz zrobić w tym pliku, wpisując kilka poleceń.

Kolejny: możesz pobrać plik z Internetu za pomocą jednego prostego polecenia:

wget www.google.com/images/logos/ps_logo2.png

A następnie otwórz plik w ten sposób:

shotwell ps_logo2.png
Aleksandr Levchuk
źródło
6
Nie jestem pewien, że The way specjalistów zrobić to jest prawidłowe, to bardziej przypadek prosty sposób zaawansowany (dla kontroli produkcji) sposób
Hailwood
Dobrze wiedzieć, że zrobiłem to tak, jak robią to profesjonaliści podczas pierwszego procesu. Myślałem, że to podstawowy sposób użytkownika.
NelsonGon
19

W systemie Ubuntu 13.04 pliki wykonywalne otwarte w Nautilus są teraz domyślnie otwierane w gedit, zamiast monitować użytkownika o ich wykonanie. Aby włączyć klasyczne zachowanie, musisz dostosować preferencje:

Nautilus → menu Edycja → Preferencje → karta Zachowanie → Kliknij przycisk opcji obok Pytaj za każdym razem.

niesprawiedliwy
źródło
Osoba, która zadała pytanie, mówi o Ubuntu 10.10
edwin
1
Dziękuję Ci!!! Nie wiem, dlaczego to zmienili, nie mogłem wymyślić, jak cokolwiek zrobić.
mpen
1
To właściwa odpowiedź dla najnowszego systemu Ubuntus.
gaRex
Jak dostać się do Nautilus w 15.10?
Yaakov Ainspan
Począwszy od Ubuntu 18.04, możesz uzyskać dostęp do preferencji, otwierając katalog, a następnie klikając „Pliki -> Preferencje” na górnym pasku.
tparker
7

Przejdź do katalogu, w którym .shznajduje się plik, używając cd. W tym przykładzie zapisałem mój shplik jako~/Desktop/shell_practice/test.sh

najpierw zrób, pwdaby dowiedzieć się, gdzie jesteś, a jeśli powróci /home/username(gdzie usernamejest twoja prawdziwa nazwa użytkownika), możesz uruchomić

cd Desktop/shell/practice

Jeśli wydajesz się być gdzieś indziej, możesz użyć ścieżki absolutnej

cd ~/Desktop/shell/practice

lub

cd $HOME/Desktop/shell/practice

lub nawet

cd /home/$USER/Desktop/shell/practice

to wszystkie sposoby na opisanie tego samego miejsca. Po dotarciu do lokalizacji skryptu wpisz

ls

Jeśli widzisz shplik na wyjściu, możesz użyć chmodgo, aby był wykonywalny. W moim przypadku pamiętaj, że nazwa pliku to test.sh, więc bym uruchomił

chmod u+x test.sh

Teraz, gdy jesteśmy w tym samym katalogu co skrypt, musimy określić w powłoce, że chcemy wykonać plik, podając jego lokalizację ./(bieżący katalog poprzedzony jest separatorem ścieżek, aby odróżnić go od nazwy pliku). Aby uruchomić mój plik, wpisałbym:

./test.sh

Jeśli skrypt został poprawnie napisany, będzie działał bez błędów ...

Oto przykład na żywo: Oto przykład na żywo

Egzorcysta
źródło
Pomogło
1
Wb, @ RuD3B0y, starałem się zachować najlepsze odpowiedzi dla noobów, bez treści high tech, jeśli masz jakieś zmiany, proszę.
Egzorcysta,
4

2 główne kroki.

  1. w terminalu użyj gedit do napisania i zapisania skryptu z rozszerzeniem „.sh” na pulpicie. (ale można użyć dowolnego edytora tekstu)

  2. otwórz Nautilus i kliknij prawym przyciskiem myszy plik script.sh.

    • w obszarze właściwości zaznacz pole „zezwól na uruchamianie pliku ..”

    • w menu Nautilus kliknij plik, następnie preferencje, a następnie zachowanie

    • zaznacz „uruchamiaj wykonywalne pliki tekstowe po ich otwarciu”.

Teraz, po dwukrotnym kliknięciu pliku na pulpicie, powinien on zostać wykonany. nie ma potrzeby .lub./

obrabować
źródło
3
  1. Kliknij .shplik prawym przyciskiem myszy i uczyń go wykonywalnym.

  2. Otwórz terminal ( Ctrl+ Alt+ T).

  3. Przeciągnij .shplik do okna terminala i patrz z podziwem.

1p_bunny
źródło
1
Witamy w Ask Ubuntu! Zalecam edycję tej odpowiedzi, aby rozszerzyć ją o szczegółowe informacje na temat pierwszego kroku. (Zobacz także Jak napisać dobrą odpowiedź? Zawiera ogólne porady na temat tego, jakie rodzaje odpowiedzi są uważane za najcenniejsze na AskUbuntu.)
David Foerster
3

Można to zrobić na kilka sposobów.

opcja 1

  1. W terminalu przejdź do katalogu, w którym znajduje się plik Bash cd(zmień katalog).

    Dawny. cd Downloads

  2. Biegać bash <filename>.sh

    Działa to również z plikami .run. Na tej stronie znajduje się przykład tego użycia przy aktualizacji Rhythmbox.

Opcja 2

  1. W terminalu przejdź do katalogu, w którym znajduje się plik bash.

  2. Biegać chmod +x <filename>.sh

  3. W Nautilus otwórz plik.

Kenny Stier
źródło
3

W przypadku Ubuntu 18.04 wprowadzono niewielką modyfikację, ponieważ nie pojawia się wyskakujące okno dialogowe.

Musisz więc:

Kliknij prawym przyciskiem myszy Pliki, wybierz Preferencje> Wybierz kartę Zachowanie> Zaznacz opcję „Zapytaj, co zrobić” w obszarze Plik wykonywalny.

Teraz, po dwukrotnym kliknięciu dowolnego pliku .sh, pojawi się wyskakujące okienko, w którym możesz wybrać opcję „uruchom w terminalu”, aby uruchomić plik .sh

wprowadź opis zdjęcia tutaj

Akhilesh Dhar Dubey
źródło
2

W Ubuntu 16.04 jest to, jak otworzyć go w terminalu:

Idź do File Manager > Edit > Preferences > Behaviordo Executable Text Filesi wybierz Ask each time.

Problem polega na tym, że domyślnie jest ustawiony na View Executable Files when they are opened.

Leniel Maccaferri
źródło
1

Jeśli umieścisz skrypt powłoki lub inny plik wykonywalny, który utworzysz w / usr / local / bin, zostanie on znaleziony i wykonany bez konieczności podawania ścieżki folderu w wierszu poleceń lub dodawania ./ do nazwy. Na przykład utworzyłem następujący prosty 3-wierszowy skrypt bash, aby wyświetlić UUID dysku:

#!/bin/bash
echo "* UUIDs must match in /etc/fstab and /boot/grub/menu.lst"
sudo blkid

Nazwałem plik uuid i umieściłem go w / usr / local / bin. W wierszu poleceń muszę tylko wpisać:

uuid
fragos
źródło
0

Cóż, ja też stanąłem przed tym samym problemem. Chciałem uruchomić plik .sh, który otworzył się za pomocą Gedit na CentOS 7. Więc oto co zrobiłem:

  1. Nawigowałem do ścieżki .shpliku, który chciałem wykonać.
  2. Otworzyłem terminal.
  3. Po prostu przeciągnąłem i upuściłem okno terminala, a ono automatycznie pobierało ten plik wraz ze ścieżką jako dane wejściowe.
  4. Naciśnij Enter i jesteś gotowy do pracy!
Jen Bates
źródło
0

Problem, który znalazłem w kilku dystrybucjach, polega na tym, że ukryli opcję preferencji w Nautilusie, ale naprawa tego w Ubuntu i innych dystrybucjach za pomocą Gnome3 jest taka sama (dosłownie właśnie zrobiłem tę wersję Fedory i opublikowałem poprawkę, aby mi przypomnieć jak w przyszłości).

  1. zainstalować dconf-editor

    sudo apt-get install dconf-editor
  2. Uruchom dconf-editorużywając konta użytkownika, na którym chcesz to zrobić, tj. NIE root

    dconf-editor
  3. Przejdź do następującego schematu:

    org.gnome.nautilus.preferences

  4. Zmień domyślną opcję, aby domyślnie się nie otwierała:

    Znajdź executable-text-activationkliknij słowo displayi zmień naask

dzięki czemu będziesz mógł edytować, przeglądać lub uruchamiać plik w przyszłości

Snider
źródło
0

W Linuksie jestem noobem i właśnie miałem ten sam problem. Jeśli wszystko inne zawiedzie:

  1. Otwórz terminal
  2. Otwórz folder zawierający plik .sh
  3. Przeciągnij i upuść plik w oknie terminala
  4. Ścieżka pliku pojawia się w terminalu. Prasa Enter.
  5. Voila, Twój plik .sh jest uruchomiony.
Linux_noob
źródło
-2

Możesz także użyć .sztuczek z sugestiami innych odpowiedzi.

Na przykład:

chmod +x filename.sh, zakładając, że już przeszedłeś do ścieżki do pliku, a następnie uruchom plik za pomocą dowolnej z następujących komend:

sh filename.sh

./filename.sh

. filename.sh
Awais
źródło
2
ostrzeżenie : Te trzy polecenia nie są równoważne. Jeśli twój shebang odwołuje się do innego pliku binarnego (takiego jak Stack), wówczas trzecie polecenie spróbuje parsować argumenty z Bash, co się nie powiedzie.
Jezen Thomas