Mam skrypt powłoki, który chcę uruchomić bez użycia poleceń „sh” lub „bash”. Na przykład:
Zamiast: sh script.sh
Chcę użyć: script.sh
W jaki sposób mogę to zrobić?
PS (i) Nie używam dużo skryptów powłoki i próbowałem czytać o aliasach, ale nie rozumiałem, jak ich używać.
(ii) Przeczytałem również o powiązaniu skryptu z innym plikiem w zmiennych PATH. Korzystam z mojego serwera uniwersyteckiego i nie mam uprawnień do tworzenia pliku w tych lokalizacjach.
$HOME/bin
- jeśli jeszcze go nie masz, dodaj go do ŚCIEŻKI (z przodu). Umieść skrypty (i wszelkie inne programy), które chcesz wykonać bezpośrednio, bez określania nazwy ścieżki tutaj lub dowiązań symbolicznych tutaj, gdzie znajdują się rzeczywiste programy.mv example.sh example
a następnieexample
powinien działać samodzielnie.Odpowiedzi:
Dodaj „shebang” u góry pliku:
I uczyń swój plik wykonywalnym (
chmod +x script.sh
).Na koniec zmodyfikuj ścieżkę, aby dodać katalog, w którym znajduje się skrypt:
(zazwyczaj chcesz
$HOME/bin
przechowywać własne skrypty)źródło
source script.sh
działało dobrze, a raczejsource <filename_without_any_extension_type>
source ./my-cool-script
(lub. ./my-cool-script
) zanieczyści bieżącą sesję powłoki dowolnymi zmiennymi zdefiniowanymi w skrypcie. Sourcingu nie należy używać, chyba że chcesz jawnie zmodyfikować sesję powłoki, ustawiając zmienne środowiskowe, zmieniając katalog itp. Naprawdę okropne błędy mogą spowodować inaczej, ponieważ zmienne z jednego skryptu, jeśli zostaną wykonane za pomocą sourcingu, mogą wpłynąć na wykonanie innego skryptu../
, możesz mieć kolizję nazw. Spróbuj zmienić nazwę.Oto niektóre z warunków bezpośredniego używania nazwy skryptu:
she-bang (#!/bin/bash)
linię na samej górze.chmod u+x scriptname
powoduje, że skrypt jest wykonywalny. (gdziescriptname
jest nazwa twojego skryptu)/usr/local/bin
folderze.Uwaga: Sugerowałem, aby umieścić go w
/usr/local/bin
folderze, ponieważ najprawdopodobniej będzie to ścieżka już dodana do twojegoPATH variable
.Aktualizacja:
Jeśli nie masz dostępu do
/usr/local/bin
folderu, wykonaj następujące czynności:myscripts
.ls -lart
w swoim katalogu domowym, aby zidentyfikować skrypt startowy, którego używa powłoka. Powinno to być.profile
albo.bashrc
.export set PATH=$PATH:~/myscript
.scriptname
.źródło
. .bashrc
. To znaczy, po prostu wstaw,.
aspace
następnie nazwę skryptu startowego.Tylko upewnij się, że jest wykonywalny, używając
chmod +x
. Domyślnie bieżącego katalogu nie ma na PATH, więc musisz go wykonać jako./script.sh
- lub w inny sposób odwołać się do niego kwalifikowaną ścieżką. Ewentualnie, jeśli naprawdę potrzebujeszscript.sh
, musisz dodać ją do ŚCIEŻKI. (Być może nie masz dostępu do modyfikowania ścieżki systemowej, ale prawie na pewno możesz zmodyfikować ŚCIEŻKĘ własnego bieżącego środowiska.) Zakłada się również, że skrypt zaczyna się od czegoś podobnego#!/bin/sh
.Możesz także użyć aliasu, który nie jest tak naprawdę związany ze skryptami powłoki, ale tylko powłoką i jest prosty:
Co pozwoliłoby ci używać po prostu
script.sh
(dosłownie - to nie zadziała dla żadnego innego*.sh
pliku) zamiastsh script.sh
.źródło
alias
polecenie w wierszu poleceń powłoki, a wtedy dostępny będzie alias do uruchomienia polecenia.W tym przykładzie plik zostanie wywołany
myShell
Przede wszystkim musimy utworzyć ten plik, możemy po prostu zacząć od wpisania:
Zauważ, że nie umieściliśmy
.sh
rozszerzenia? To dlatego, że kiedy uruchamiamy go z terminala, musimy tylko wpisaćmyShell
, aby uruchomić nasze polecenie!Teraz, w nano, najwyższa linia MUSI być
#!/bin/bash
wtedy możesz opuścić nową linię przed kontynuowaniem.Dla celów demonstracyjnych dodam podstawową
Hello World!
odpowiedźWięc wpisuję następujące:
Następnie mój przykład powinien wyglądać następująco:
Teraz zapisz plik, a następnie uruchom następujące polecenie:
Teraz stworzyliśmy plik wykonywalny, do którego możemy go przenieść
/usr/bin/
za pomocą następującego polecenia:Aby upewnić się, że komputer może go poprawnie wykonać, będziemy musieli ponownie uruchomić komputer
użyłem
sudo shutdown -r now
Gratulacje! Nasze polecenie jest już gotowe! W terminalu możemy wpisać
myShell
i należy powiedziećHello World!
źródło
/usr/bin
- wiele systemów dostosowuje się/usr/local/bin
do tego celu i rezerwuje/usr/bin
wyłącznie dla systemu operacyjnego.sudo chmod
własnego pliku.Musisz włączyć bit programu dla programu.
Następnie możesz użyć
./script.sh
Możesz dodać folder do ŚCIEŻKI w swoim
.bashrc
pliku (znajdującym się w katalogu domowym). Dodaj ten wiersz na końcu pliku:źródło
Możesz wpisać sudo install (nazwa skryptu) / usr / local / bin / (co chcesz wpisać, aby wykonać wspomniany skrypt)
np .:
sudo install quickcommit.sh /usr/local/bin/quickcommit
wprowadź hasłoteraz może działać bez .sh i w dowolnym katalogu
źródło
Dodaj . (bieżący katalog) do zmiennej PATH.
Możesz to zrobić, edytując plik .profile.
wstaw następującą linię do pliku .profile
PATH=$PATH:.
Upewnij się, że dodałeś
#!/bin/bash
linię Shebang ( ) na początku skryptu i sprawiłeś, że skrypt jest wykonywalny (używachmod +x <File Name>
).źródło
Oto mój skrypt zapasowy, który da ci pomysł i automatyzację:
Serwer: Ubuntu 16.04 PHP: 7.0 Apache2, Mysql itp ...
zmień / home / user na katalog użytkownika i wpisz: backupscript w dowolnym miejscu terminala, aby uruchomić skrypt! (zakładając, że / usr / bin jest na twojej ścieżce)
źródło
Wpisz
"#!/bin/sh"
przed skryptem. Następnie zapisz jakscript.sh
na przykład. skopiuj go do$HOME/bin
lub$HOME/usr/bin
Katalog może być różny dla różnych dystrybucji Linuksa, ale kończą się na
'bin'
i znajdują się w katalogu domowymcd $HOME/bin
lub$HOME/usr/bin
Typie.
chmod 700 script.sh
Możesz go uruchomić, wpisując
run.sh
na terminalu. Jeśli to nie działa, spróbujchmod +x run.sh
zamiastchmod 700 run.sh
źródło
Ustaw dowolny plik jako wykonywalny
Załóżmy, że masz plik wykonywalny o nazwie migrate_linux_amd64 i chcesz uruchomić ten plik jako polecenie takie jak „migruj”
Upewnij się, że masz uprawnienia do pliku,
-rwxr-xr-x 1 oracle oinstall 7473971 May 18 2017 migrate.linux-amd64
jeśli nie, uruchom
chmod +x migrate.linux-amd64
Następnie skopiuj plik do
/usr/local/bin
. Ten katalog jest własnością root, użyj sudo lub przełącz się na root i wykonaj następującą operacjęźródło
Właśnie:
źródło