Jak zrobić plik (np. Skrypt .sh), aby można go było uruchomić z terminala


245

Mam plik script.sh, a typem tego pliku jest plik shellscript. Chcę, aby ten plik był plikiem wykonywalnym application / x. Jak mogę to zrobić?



1
Możliwe duplikaty Jak uruchomić pliki .sh?
karel

Nie jest to duplikat, ponieważ poprosiłem konkretnie o uczynienie go aplikacją / x-wykonywalnym. Drugie pytanie dotyczy tylko otwarcia pliku sh w terminalu.
Ziyaddin Sadigov

Odpowiedzi:


326

Możesz oznaczyć plik jako wykonywalny:

chmod +x filename.sh

Następnie możesz wykonać to w następujący sposób:

./filename.sh

Jeśli chcesz użyć innego polecenia, aby go uruchomić, możesz dodać alias:

gedit ~/.bashrc

Dodaj to na końcu pliku:

alias <new name>='/home/<full path to script>/filename.sh'

Otwórz nową sesję terminala lub wpisz source ~/.bashrcswój terminal, aby go zastosować. Następnie po prostu użyj nowej nazwy, aby uruchomić skrypt.


Czy wiesz, jak używać polecenia sudo po wprowadzeniu polecenia jako: „alias command1 = '/home/user_name/dir/script.sh'. W moim przypadku działa bez sudo, ale nie z nim.
Aditya

Musisz ponownie uruchomić bash po edycji uruchomienia .bashrc: exec bash, aby zrestartować bash.
Sampath Perera

2
Dlaczego plik wykonywalny jest ./filename.shnie tylko filename.sh?
user1993,

@ user1993 tak, szukam również sposobu, aby był wykonywalny tylko filenamei nie./filename
MycrofD

@ użytkownik1993 Ogólnie, użycie ./filename.shokreśla plik w bieżącym katalogu, a użycie filename.shokreśla plik w bieżącym katalogu lub dowolnym katalogu ŚCIEŻKI. Pierwsze użycie usuwa wszelką niepewność, do którego pliku można uzyskać dostęp. W takim przypadku próbujesz wykonać skrypt za pomocą bash lub innego interpretera (na podstawie założonego #!/bin/bashpierwszego wiersza skryptu), po prostu wpisując nazwę pliku. To użycie wymaga podania katalogu. Alternatywnie możesz spróbować, bash filename.shktóry wydaje się działać z nieokreślonym katalogiem.
a505999

37

Istnieją dwa sposoby na wykonanie pliku:

Metoda GUI:

Przejdź do karty uprawnień, a następnie zaznacz pole `Wykonaj: [] Zezwól na uruchamianie pliku jako programu.

wprowadź opis zdjęcia tutaj

Metoda terminala / polecenia:

Możesz użyć:

cd /to/my/required/directory

Następnie uruchomić

chmod +x filename.extension

Lub po prostu uruchom:

chmod +x /path/to/your/filename.extension

chmod ma również kilka bardziej zaawansowanych opcji:

Spacje mają pokazywać, że jest on podzielony: - rwx --- ---

Pierwszy zestaw ---to Użytkownik. Drugi to Grupa, a ostatni Inny (każdy inny)

r oznacza Odczyt, w dla Zapis i x dla eXecute.

Aby więc umożliwić wszystkim odczytanie, ale tylko Grupie do wykonania, a Użytkownikowi do odczytu i zapisu (ale z jakiegoś powodu nie można go wykonać), byłoby:

-rw- rx- r-- Ale zostanie to dodane do polecenia jako:

chmod +rw-rx-r-- /path/to/file.extension

chmodmoże to również zrobić w liczbach. Opiera się na binarnym (myślę, że to 1,2 i 4)

Są więc te liczby:

Wykonanie przez użytkownika to 100. Wykonaj według grupy to 010. Wykonane przez inny to 001

Napisz przez użytkownika to 200. Pisz według grup to 020. Napisz innym jest 002.

Odczytany przez użytkownika to 400. Odczytany przez grupę to 040. Czytane przez innych jest 004.

Następnie dodajesz je razem, aby uzyskać pożądaną kombinację.

Aby umożliwić wszystkim odczytanie, ale tylko Grupę do wykonania, a Użytkownik do napisania (ale z jakiegoś powodu nie do wykonania):

400 + 040 + 004i 010i200

Daje to w sumie 600 + 050 + 004 = 654.

Następnie możesz uruchomić polecenie.

chmod +654 /path/to/file.extension ustawić.

Aby ustawić wszystkie uprawnienia, możesz wpisać:

chmod +rwxrwxrwx /path/to/file.extension

Lub (jest to trochę łatwiejsze do napisania, ale trudniejsze do zapamiętania):

chmod +777 /path/to/file.extension

Wreszcie możesz wykonać:

chmod -777 /path/to/file.extension

Aby odebrać wszystkie uprawnienia wszystkim.

I:

chmod +300 /path/to/file.extension

Aby dodać odczyt i zapis dla użytkownika, bez wpływu na jakiekolwiek inne uprawnienia (np. Wykonaj uprawnienia).

Ta strona ma bardzo przydatne małe pole wyboru siatki, w którym możesz zaznaczyć żądane opcje i daje ci polecenie:

wprowadź opis zdjęcia tutaj

Jednak nie wszystkie możliwe kombinacje są rozsądne w użyciu; główne z nich są następujące:

755 - Ownerma wszystko Groupi Othermoże czytać i wykonywać

700 - Ownerma wszystko

644 - Ownerpotrafi czytać i pisać Grouporaz Otherpotrafi czytać

600 - Ownerpotrafi czytać i pisać

A jeśli używasz nietrywialnych grup użytkowników:

775 - Ownerpotrafi czytać i pisać Grouporaz Otherpotrafi czytać

770 - Owneri Groupmają wszystko, i Othermogą czytać i wykonywać

750 - Ownerma wszystko i Groupmoże czytać i wykonywać

664 - Owneri Groupumie czytać i pisać, i Othermoże po prostu czytać

660 - Owneri Groupumie czytać i pisać

640 - Ownerpotrafi czytać i pisać oraz Grouppotrafi czytać

777 i 666 są rzadko używane, z wyjątkiem / tmp.

Dziękuję Ilmari Karonen za wskazanie najczęściej używanych!


Czy nie jest oparty na liczbach ósemkowych (8-bazowych) zamiast binarnych (2-bazowych)? W systemie binarnym możesz mieć tylko 0 i 1, natomiast w formacie ósemkowym możesz mieć 0, 1, ... 6, 7
Justinas

@Justinas binarny w tym, że 7 = 4 + 2 + 1 - 111 reprezentuje odczyt i zapis oraz wykonanie.
Tim

8

Biegać:

chmod +x /path/to/file.sh

Aby uniemożliwić wykonanie pliku, uruchom:

chmod -x /path/to/file.sh

Na przykład utworzyłem .shplik:

vi tester12.sh

Po napisaniu kodu w edytorze vi wyjdę z edytora vi:

:wq!
chmod +x tester12.sh
./tester12.sh
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.